1
ipwx 2018-11-21 10:18:25 +08:00
UTF-8 基本上对 find/split/replace 是安全的。
所以为什么不用 UTF-8 呢? |
2
shylockhg 2018-11-21 10:19:52 +08:00
看需求呗,ascii---string,宽字符---xstring
|
3
wutiantong 2018-11-21 10:32:13 +08:00 1
|
4
wutiantong 2018-11-21 10:34:08 +08:00 1
|
5
wutiantong 2018-11-21 10:38:20 +08:00
实际上<codecvt>的实现情况好像一直都不太好
|
6
fyyz OP 谢谢大家,决定只用 utf-8 了
|
7
GeruzoniAnsasu 2018-11-21 11:19:30 +08:00
同一直有这个迷惑。。。我感觉 python3 的做法其实挺好,不知道有没有类似的实现
|
8
fyyz OP @ipwx 对不起我还有个问题,如果我用 string 存 utf8 字符串,那我如何遍历这个字符串中的每个字符(而不是遍历字节)呢?
|
9
htfy96 2018-11-21 11:47:07 +08:00 1
不要用 codecvt。以 Ascii 为主就全用 string,别的就使用 C++20 的 u8"字面量"和 std::u8string。转换自己处理,可以抄 http://llvm.org/svn/llvm-project/llvm/trunk/include/llvm/Support/ConvertUTF.h 一份。
|
10
GeruzoniAnsasu 2018-11-21 12:11:28 +08:00
看完 3# 发的文章有了新认识
@fyyz 照文章的说法,遍历某个 code point 并不是那么有意义,更有意义的是遍历某个字素群(比如两个码点组合成的一个字),而遍历字素群的方法在几乎所有的语言上都没有官方实现,所以大概还不如自己撸一个 |
11
fyyz OP @GeruzoniAnsasu 感觉要遍历字素群这玩意必须要看到具体的每个字符的值,并且 if 判断才行
|
12
GeruzoniAnsasu 2018-11-21 13:12:05 +08:00
@fyyz 是这样,但看起来麻烦得要死,我大概会先不管只按 code point 划分然后查表 if 一把梭有 bug 再说
|
13
ipwx 2018-11-21 15:59:40 +08:00
|
14
reus 2018-11-21 17:12:38 +08:00
用 ICU 库: http://site.icu-project.org/home
|