繁体   English   中英

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

[英]How to get Unicode for Chracter strings(UTF-8) in c or c++ language (Linux)

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

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

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

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

utf-8编码是unicode的可变宽度编码。 每个unicode代码点可以编码为一到四个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 ,...

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM