SDL 2.0 TextInputeVent UTF8数据存储



我想渲染文本。我的问题是我不知道如何使用sdl_textinputevent的char [32]字段文本。根据文档,这是" utf-8编码中的无效输入文本"。据我了解,UTF8需要8位,而一个或多或少有8位。但是,为什么SDL为我提供一个32个数组,所以8位或1个字节 * 32 = 32字节,如果UTF8只需要1个字节?

我需要弄清楚该值,以便我可以将其解析为freetype以获取字形的索引。该字符[32]字段的"布局"是什么?

utf-8被称为UTF-8,因为它将文本编码为8位单元的序列。每个Unicode字符(代码点)将被编码为1、2、3或4个字节。同样,UTF-16用16位单元编码字符(代码点),每个字符将采用16位 32位。在文本编码中,每个字符正好是8位,例如ASCII 1 或各种拉丁语编码,但是它们已过时,除非您已经在这些编码中已经编码过文本,否则您应该避免它们。p>也有可能由用户按下键盘上的键而导致多个字符,这解释了为什么字段如此之大。

为了使用freetype正确渲染UTF-8文本,请将UTF-8文本加载到harfbuzz缓冲区中,该文本将运行成型算法,并为您提供Glyph索引和Glyph位置的列表。

如果您不想使用harfbuzz(也许您只关心英语),那么您可以自己做。您将必须将UTF-8文本读取为UNICODE代码点的序列,然后使用Freetype将这些代码点传递到字体中的Unicode字符映射,然后绘制所得的字形。这通常会给您带来不正确的结果,并且结果看起来不太好,但通常足以用于英语文本。

UTF-8上的Wikipedia文章描述了如何解码它。请忽略提及5字节或6字节字符,在UTF-8中不允许。

1 :实际上是7位。

最新更新