在C+中使用UTF-8字符串和字符+; 我正在研究一个项目,它按字符按UTF-8字符串工作,但是我无法找到一种在C++中用这种方式工作UTF-8字符串的方法。
我需要的是:在C+中使用UTF-8字符串和字符+; 我正在研究一个项目,它按字符按UTF-8字符串工作,但是我无法找到一种在C++中用这种方式工作UTF-8字符串的方法。,c++,text,utf,C++,Text,Utf,我需要的是: 字符串必须是UTF-8,因为字符串不限于英语字母 按原样存储和检索它们是不够的,因为我将逐个字符地处理它们并对它们进行处理 一个字符一个字符地访问它们,并且能够将它们与其他UTF-8字符进行比较是一项要求 任何C++(不管98/11/14)特性或库的建议都很受欢迎。 不使用Boost的附加点。我倾向于在没有外部依赖的情况下开发工具。C++因对unicode开箱即用的支持非常差而臭名昭著。因此,最好的选择是使用类似于或boost的库 友好建议: 我倾向于开发没有外部依赖的工具 你
- 字符串必须是UTF-8,因为字符串不限于英语字母
- 按原样存储和检索它们是不够的,因为我将逐个字符地处理它们并对它们进行处理
- 一个字符一个字符地访问它们,并且能够将它们与其他UTF-8字符进行比较是一项要求
任何C++(不管98/11/14)特性或库的建议都很受欢迎。
不使用Boost的附加点。我倾向于在没有外部依赖的情况下开发工具。C++因对unicode开箱即用的支持非常差而臭名昭著。因此,最好的选择是使用类似于或boost的库 友好建议: 我倾向于开发没有外部依赖的工具
你需要证明这句话的正确性,否则,如果这是你的任意规则,你就限制了自己。与语言一样,库也是工具。选择要使用的工具需要进行分析,并将其优点与缺点进行权衡。您的意思是,使用代码点(与实际的
char
s–即字节相反)?对以上答案的一点补充。我建议你先读,然后可能读,还有。了解东西的实际工作原理总是很好的,尤其是当它是软件的重要组成部分时。虽然您最终肯定会使用ICU:-)但是您可以使用宽字符
(或者多字节
)来处理Unicode
是对
<> P>也看到了国际化标准,如I18N和CF < /P >,您是否已经听说过?这个答案(以及它引用的一个)应该提供您所需要的:可能的重复标准C++已经有<代码> UTF-8/COD> >代码> UCS-16<代码> /UTF-32 < /Cord>转换器,不需要外部库。@库巴伯,我想要字符,不是那个特殊字符的字节。谢谢你的建议!由于各种原因,我喜欢使用可以完全嵌入到源代码树中的库。首先,它消除了安装大型库的开发包只是为了编译(我的)一个小实用程序的负担,然后它消除了代码维护的负担,以便在库的发展过程中保持库的兼容性。最后,它使该工具更具可移植性,因为我并不总是有机会安装大量的开发包来编译我的工具。然而,最好的方法是使用boost或其他所谓的大库,我很乐意在文章末尾使用它day@bayindirh现在可以使用VCPKG()来构建和集成几乎所有的C++库。它已经得到了广泛的关注,并且对于使用第三方LIB的快速原型开发和企业场景(请参见他们的导出
命令)@bayindirh-solid-argument,它都同样适用。如果您知道自己在做什么,看起来您是这样做的,那么您是唯一能够判断自己实现utf8支持是否值得的法官。@bolov,谢谢。我将查看
,
和其他,如果我能找到一个可嵌入的库(如libICU
,eigen
等),我将毫不犹豫地使用它。这是一个个人项目,因此没有时间压力。我将努力在挑战(不是在这里发明的)和实用主义之间取得一个健康的平衡。实际上,我需要接触角色本身。我要处理的文本保证有两个字节的unicode字符,我需要访问它们而不看到它们的不同字节。由于C++可以在easylogging++
STD::String
中存储和读取Unicode字符串,通过将字节内部划分,并对这些二进制值进行冷漠的行为,我使用代码点来明确指出,我需要访问两个字节字符作为字符本身,而不是这两个字节字符的单独字节。我明白你的意思,只是表达得不太好。我所说的实际字符是指
s–字节值。编辑了答案。 char