在C ++中使用UTF-8字符串和字符

时间:2018-10-21 18:58:20

标签: c++ text utf

我正在一个逐字符处理utf-8字符串的项目,但是我找不到在C ++中以这种方式处理UTF-8字符串的方法。

我需要的是

  • 字符串必须为UTF-8,因为字符串不仅限于英语字母。
  • 按原样存储和检索它们是不够的,因为我将逐个字符地处理它们并对其进行处理。
  • 需要逐个字符地访问它们,并且能够与其他UTF-8字符进行比较。

非常欢迎使用任何C ++(无论14年11月11日)功能或库。

不使用Boost的其他要点。我倾向于开发没有外部依赖的工具。

3 个答案:

答案 0 :(得分:1)

C ++以开箱即用的Unicode支持非常差而臭名昭著。因此最好的选择是使用ICU之类的库或boost。

友善建议:

  

我倾向于在没有外部依赖的情况下开发工具

您需要证明此声明的合理性,否则,如果这是您的任意规则,则您将自己限制于此。像语言一样,库也是工具。需要分析使用哪种工具,并权衡不利因素。

答案 1 :(得分:1)

您的意思是,使用代码点(而不是实际的char-即字节)?除了上述答案的一小部分。我建议您先阅读specs on how UTF-8 works,然后再阅读"UTF-8 Everywhere" manifesto,再阅读look here – it is a nice example of how to build a UTF-8 code point iterator。了解东西的实际工作原理总是很高兴的,尤其是当它是软件的重要组成部分时。虽然您最终肯定会使用ICU:-)

答案 2 :(得分:0)

您可以使用drwxr-xr-x 1 me 197121 0 Oct 21 14:35 ./ drwxr-xr-x 1 me 197121 0 Oct 20 17:11 ../ drwxr-xr-x 1 me 197121 0 Oct 21 14:35 .git/ drwxr-xr-x 1 me 197121 0 Oct 21 14:36 .idea/ -rw-r--r-- 1 me 197121 9963 Oct 21 15:02 agreement.html -rw-r--r-- 1 me 197121 17 Oct 21 15:02 contact.html -rw-r--r-- 1 me 197121 14027 Oct 21 15:02 documents.html -rw-r--r-- 1 me 197121 17048 Oct 21 15:02 form.html -rw-r--r-- 1 me 197121 11060 Oct 21 15:02 index.html -rw-r--r-- 1 me 197121 4921 Oct 21 15:02 slideshow.html drwxr-xr-x 1 me 197121 0 Oct 21 15:02 static/ (也可以使用.git/)来处理Unicode

https://www.geeksforgeeks.org/wide-char-and-library-functions-in-c/ 中,是Wide Chars

的C ++库函数的摘要

另请参阅 I18N 和cf https://www.cprogramming.com/tutorial/unicode.html

这样的国际化标准