我已经在这里搜索了这类问题的答案,并且已经找到了很多这些问题 - 但我仍然对这件事的明显琐碎性存在这种唠叨的怀疑。
我已经阅读了这篇非常有趣的关于这个主题的有用文章:http://www.joelonsoftware.com/articles/Unicode.html,但它让我想知道如何在给定Unicode数据缓冲区的情况下识别单个字形。
我的问题是:
我如何解析Unicode字符串,比如说UTF-8?
假设我知道字节顺序,当遇到应该由6个字节表示的字形的开头时会发生什么?
也就是说,如果我正确地解释了存储方法。
这与我设计用于OpenGL的文本显示系统有关。 我将字形数据存储在显示列表中,我需要将字符串的内容转换为字形索引序列,然后映射到显示列表索引(因为,显然,将整个字形集存储在图形内存中并不总是实用的)。
要考虑到我需要显示的所有东西,必须将每个字符串表示为一个短裤数组,需要大量的存储空间。
此外,在我看来,每个字符2个字节仅仅不足以表示每个可能的Unicode元素。
答案 0 :(得分:2)
我如何解析Unicode字符串,比如说UTF-8?
我假设通过“解析”,你的意思是转换为代码点。
通常,您不必这样做。例如,您可以在另一个UTF-8字符串中搜索UTF-8字符串,而无需关心这些字节所代表的字符。
如果您确实需要转换为代码点(UTF-32),那么:
此外,在我看来,2 每个字符的字节数不是 足以代表每一个可能的 Unicode元素。
不是。 Unicode最初意图是固定的16位编码。之后决定65,536个字符是不够的,因此创建了UTF-16,并重新定义了Unicode以使用0到1,114,111之间的代码点。
如果需要固定宽度编码,则需要21位。但它们并不是很多具有21位整数类型的语言,所以实际上你需要32位。
答案 1 :(得分:0)