我已经尝试过搜索stackoverflow来找到答案,但我发现的问题和答案都在 10岁,我似乎无法就此问题达成共识和可能的进展。
我知道在stl之外有几个库应该处理unicode -
stl(wstring,codecvt_utf8)有一些功能,但人们似乎对使用感到矛盾,因为他们处理UTF-16这个网站:{{3 }})表示不应该使用,许多人在网上似乎同意这个前提。
我唯一想要的是能够用unicode字符串做4件事 -
从我可以告诉icu处理这个以及更多。我想知道的是,如果在Linux,Windows和MacOS上有一种标准的处理方式。
感谢您的时间。
答案 0 :(得分:12)
我会尝试在这里提出一些想法:
一旦你离开基本多语言平面(16位代码点),事情就会变得越来越复杂。 emoji特别难以处理:表情符号后面可以跟一个变体选择器(U + FE0E VARIATION SELECTOR-15(VS15)用于文本或U + FE0F VARIATION SELECTOR-16( VS16)用于表情符号式)改变其显示风格,或多或少是1970年ascii用于打印i bs ^
时使用的旧î
。不仅如此,字符U + 1F3FB到U + 1F3FF用于为跨越六个块的102个人类表情符号提供肤色:标志,表情符号,杂项符号,杂项符号和象形文字,补充符号和象形文字,和运输和地图符号。
这仅仅意味着最多3个连续的unicode代码点可以代表一个单一的字形......所以一个字符是一个char32_t
的想法仍然是近似值
我的结论是Unicode 是一件复杂的事情,而且确实需要一个像ICU这样的专用库。当您只处理BMP时,您可以尝试使用标准库转换器之类的简单工具,但完全支持远不止于此。
BTW:甚至其他像Python这样的假装有本地unicode支持的语言(恕我直言,比当前的C ++更好)在某些方面失败了:因此,对Unicode的支持已经超过10年了,我真的不希望未来10年内情况会好转......