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

Ash*_*dav 4 c c++ unicode utf-8

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

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

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

  1. 字符“?” 具有U + 2260 Unicode值。
  2. 字符“?” 具有U + 5EFA Unicode值。

Syl*_*sne 5

utf-8编码是unicode的可变宽度编码。每个unicode码点可以被编码为一到四个char

要解码char*字符串并提取单个代码点,请读取一个字节。如果设置了最高有效位,则代码点被编码为多个字符,否则为unicode代码点。从最高有效位开始计数的设置位数表示使用多少char来编码unicode码点。

下表说明了如何进行转换:

UTF-8 (char*)                       | Unicode (21 bits)
------------------------------------+--------------------------
0xxxxxxx                            | 00000000000000000xxxxxxx
------------------------------------+--------------------------
110yyyyy 10xxxxxx                   | 0000000000000yyyyyxxxxxx
------------------------------------+--------------------------
1110zzzz 10yyyyyy 10xxxxxx          | 00000000zzzzyyyyyyxxxxxx 
------------------------------------+--------------------------
11110www 10zzzzzz 10yyyyyy 10xxxxxx | 000wwwzzzzzzyyyyyyxxxxxx
Run Code Online (Sandbox Code Playgroud)

基于此,该代码相对容易编写。如果您不想编写它,则可以使用为您进行转换的库。Linux下有很多可用的软件:libiconvicuglib,...