![](/img/trans.png)
[英]Does C++ support converting between character encodings other than UTF-8, UTF-16, and UTF-32?
[英]Working with UTF-8 vs UTF-16 vs UTF-32 internally within C++?
我只有处理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的成熟库。
我真的很想听听您对此事的看法。
我碰到了很老的答案,我会告诉你我最终要做什么。 我决定坚持使用UTF-8并将数据存储在std :: string或单字节char数组中 。 从未需要我使用多字节字符!
我使用的第一个库是UTF8-CPP,它很容易引入您的应用程序并使用。 但是您很快就会发现您需要越来越多的功能。
我真的想避免使用ICU,因为它是如此大的库,但是一旦构建并安装了ICU,您就开始希望自己做完了,因为它具有您需要的一切,还有更多。
您可能想知道我有什么好处:
缺点:
当我查看内置语言功能时,发现一些不足,例如小写/大写转换,单词边界,计数字符,重音敏感度,诸如子字符串之类的字符串处理等。本地支持也非常令人惊讶。
我想这总结了UTF-8中的整个练习。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.