如何使用c或c ++语言(Linux)获取字符串(UTF-8)的Unicode

时间:2011-03-25 07:08:35

标签: c++ c unicode utf-8

我正在开发一个应用程序,我需要知道字符的Unicode,将它们分类为汉字,日文字符(汉字,片假名,平假名),拉丁语,希腊语等。

给定的字符串是UTF-8格式。

如果有任何方法可以知道UTF-8字符的Unicode吗?例如:

  1. 字符'≠'具有U + 2260 Unicode值。
  2. 字符'建'具有U + 5EFA Unicode值。

2 个答案:

答案 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下有许多可用的内容:libiconvicuglib,...

答案 1 :(得分:1)

libiconv可以帮助您将utf-8字符串转换为utf-16或utf-32。如果你真的想支持每个可能的unicode代码点,Utf-32将是最好的选择。