我正在开发一个应用程序,我需要知道字符的Unicode,将它们分类为汉字,日文字符(汉字,片假名,平假名),拉丁语,希腊语等。
给定的字符串是UTF-8格式。
如果有任何方法可以知道UTF-8字符的Unicode吗?例如:
答案 0 :(得分:4)
utf-8编码是unicode的可变宽度编码。每个unicode代码点可以编码为1到4 char
。
要解码char*
字符串并提取单个代码点,您需要读取一个字节。如果设置了最高有效位,则代码点在多个字符上编码,否则它是unicode代码点。从最高有效位计数的位数表示用于编码unicode代码点的char
个。
此表解释了如何进行转换:
UTF-8 (char*) | Unicode (21 bits)
------------------------------------+--------------------------
0xxxxxxx | 00000000000000000xxxxxxx
------------------------------------+--------------------------
110yyyyy 10xxxxxx | 0000000000000yyyyyxxxxxx
------------------------------------+--------------------------
1110zzzz 10yyyyyy 10xxxxxx | 00000000zzzzyyyyyyxxxxxx
------------------------------------+--------------------------
11110www 10zzzzzz 10yyyyyy 10xxxxxx | 000wwwzzzzzzyyyyyyxxxxxx
基于此,代码编写起来相对简单。如果您不想编写它,可以使用为您进行转换的库。 Linux下有许多可用的内容:libiconv,icu,glib,...
答案 1 :(得分:1)
libiconv可以帮助您将utf-8字符串转换为utf-16或utf-32。如果你真的想支持每个可能的unicode代码点,Utf-32将是最好的选择。