【发布时间】:2013-09-11 09:14:44
【问题描述】:
如果我理解得很好,可以同时使用string和wstring来存储UTF-8文本。
对于char,ASCII字符占一个字节,有些汉字占3或4等。这意味着
str[3]不一定指向第4个字符。与
wchar_t相同,但每个字符使用的最小字节数始终为 2(而不是char的 1),3 或 4 字节宽的字符将占用 2wchar_t。
对吗?
那么,如果我想将string::find_first_of() 或string::compare() 等与如此奇怪的编码字符串一起使用怎么办?它会起作用吗?字符串类是否处理字符具有可变大小的事实?或者我应该只将它们用作无特征的虚拟字节数组,在这种情况下我宁愿使用wchar_t[] 缓冲区。
如果 std::string 不处理,第二个问题:是否有库提供可以处理 UTF-8 编码的字符串类,以便 str[3] 实际上指向第三个字符(这将是一个来自长度的字节数组1到4)?
【问题讨论】:
-
请注意,即使
str[3]是第四个代码点,也不一定是第四个用户感知字符。 -
@delnan 好吧抱歉(我刚刚挑选了一篇关于 wchar_t、Windows 和 UTF-16 的示例文章)。由于编辑为时已晚,我删除了评论,这里是没有“有争议”链接的部分:我认为
wchar_t的大小是实现定义的,所以不是 总是 2 个字节。此外(IIRC)Windows 使用它来存储 UTF-16 之类的东西,而不是 UTF-8。见en.wikipedia.org/wiki/Wide_character