我只有处理ASCII(单字节字符)的经验,并阅读了很多关于人们如何处理Unicode的帖子,这些帖子提出了他们自己的问题。
此时我对Unicode的接触非常有限,我已经读过使用 UTF-16进行内部处理会显示可移植性和其他问题。
我觉得 UTF-32比UTF-16 更有意义,因为所有Unicode字符都适合4个字节但会消耗更多资源,特别是如果你主要处理的是ISO-8859-1字符
我谦卑地认为UTF-8可能是一种理想的内部工作格式(特别是对于主要处理基于英语和拉丁语的字符的情况),因为ASCII字符范围将被处理逐字节非常有效。拉丁字母表中的字符会消耗两个字节,而其他字符当然会占用更多字节。
我看到的另一个优点是 UTF-8字符串可以存储在常规C ++ std :: string或C字符串数组中,这看起来很自然。
至少对我使用UTF-8的缺点是我没有找到任何内部支持UTF-8的库。例如,我没有找到任何用于UTF-8案例转换和子串操作的库。
另一个缺点是我没有找到解析UTF-8字符串中字节的函数来进行字符处理。
在内部使用UTF-8是否可行,是否有任何支持库用于此目的?我希望如此,但如果没有,我认为我最好的选择是忘记在内部使用UTF-8并使用 Boost :: Locale ,因为我读过 ICU 是一个成熟的库,许多人用它来处理Unicode。
我真的很想听听你对此事的看法。
答案 0 :(得分:0)
我碰到了很老的答案,我会告诉你我最终要做什么。我决定坚持使用 UTF-8 ,并将数据存储在std :: string或单字节char数组中。从未需要我使用多字节字符!
我使用的第一个库是UTF8-CPP,它很容易引入您的应用程序并使用。但是您很快就会发现您需要越来越多的功能。
我真的想避免使用ICU,因为它是一个很大的库,但是一旦构建并安装了ICU,您就开始希望自己做到了,因为它具有您所需的一切,而且很多,还有很多。
您可能想知道我有什么好处
缺点:
当我查看内置语言功能时,发现一些不足,例如小写/大写转换,单词边界,计数字符,重音敏感度,诸如子字符串之类的字符串处理等。本地支持也完全令人惊奇。 / p>
我想这是对UTF-8中整个练习的总结。