C++ 使用C++;2018年?
我已经尝试搜索stackoverflow来找到答案,但我找到的问题和答案都在10岁左右,由于变化和可能的进展,我似乎无法在这个问题上找到共识 据我所知,stl之外有几个库应该处理unicode-C++ 使用C++;2018年?,c++,unicode,C++,Unicode,我已经尝试搜索stackoverflow来找到答案,但我找到的问题和答案都在10岁左右,由于变化和可能的进展,我似乎无法在这个问题上找到共识 据我所知,stl之外有几个库应该处理unicode- stl(,)包含了一些功能,但人们似乎对使用UTF-16持矛盾态度,因为他们处理的是UTF-16,该网站()表示不应使用UTF-16,许多在线用户似乎同意这一前提 我唯一想要的是能够用unicode字符串做4件事- 将字符串读入内存 使用unicode或ascii使用正则表达式搜索字符串,使用
谢谢您的时间。我将尝试在这里提出一些想法:
- 文件只包含字节。目前,如果您试图在内部处理真正的Unicode代码点,则必须将其序列化为字节->这里UTF-8再次赢得该点
- 一旦你走出基本的多语言层面(16位代码点),事情就会变得越来越复杂。处理起来特别糟糕:一个表情符号后面可以跟一个变体选择器(文本的U+FE0E变体选择器-15(VS15)或表情符号样式的U+FE0F变体选择器-16(VS16))来改变它的显示样式,或多或少地改变了1970年ascii中打印
时使用的旧的î
。这还不是全部,字符U+1F3FB到U+1F3FF用于为分布在六个块中的102个人类表情符号提供肤色:丁蝙蝠、表情符号、杂项符号、杂项符号和象形文字、补充符号和象形文字以及交通和地图符号 这仅仅意味着多达3个连续的unicode代码点可以表示一个字形。。。因此,一个字符就是一个字符的想法仍然是一个近似值i bs^
大多数C++程序/程序员只是假设文本是一个几乎不透明的字节序列。UTF-8可能为此感到内疚,因此许多评论的回复也就不足为奇了:不用担心Unicode,只需处理UTF-8编码的字符串即可
BTW:甚至其他一些类似Python的语言,它们假装有一个原生Unicode支持(比目前的C++更优秀),在某些方面失败了:
- tkinter GUI库不能显示BMP之外的任何代码点,因为它是标准的空闲Python工具
- 除了核心语言支持(编解码器和Unicode数据)外,Unicode还专用于不同的模块或标准库,Python包索引中还提供了其他模块,如表情符号支持,因为标准库不能满足所有需求
这样,Unicode的支持在10年内就不好了,我真的不希望在未来的10年里事情会好得多……
“大多数C++程序/程序员只是假设一个文本是一个几乎不透明的字节序列”——怎么会这样呢?“文本”是什么意思?“文本”=任何在std::string
(不是wstring)中或指向std::string\u视图的内容。实际上,您不必知道如何解释八位字节来进行复制、移动或调用,如regexp匹配等,其他人的代码将考虑任何Unicode因素。我倾向于使用boost中的本地化函数。他们在处理类似的东西方面做得相当好,即使你需要挖掘一下。我对此发表了一些想法,我的观点是Windows和MacOS有不错的(但不同的)Unicode支持,你可能想在一些API后面抽象出来,而(AFAIK)Linux没有。或者你可以去重症监护室。我从未使用过它,但从API文档来看,它看起来相当不错。Win32 API中不支持正则表达式,因此您可能会被迫使用它。您的答案可能在这篇文章中:-)