【发布时间】:2012-06-06 11:57:48
【问题描述】:
我有这个 std::string 包含一些跨越多个字节的字符。
当我在这个字符串上做一个子字符串时,输出是无效的,因为当然,这些字符被计为 2 个字符。在我看来,我应该改用 wstring,因为它将这些字符存储为一个元素而不是更多。
所以我决定将字符串复制到一个 wstring 中,但这当然没有意义,因为字符仍然分成 2 个字符。这只会使情况变得更糟。
将字符串转换为 wstring 有没有好的解决方案,将特殊字符合并为 1 个元素而不是 2 个元素。
谢谢
【问题讨论】:
-
这是一个相关的问题:stackoverflow.com/q/4804298/1158895
-
你的字符串的编码是什么?我假设 UTF-8
-
@SirDarius,确实是 UTF-8。但我认为这个问题可以适用于任何一个字符需要多个字节的编码,不是吗?
-
当然可以,但是知道这一点很重要,因为某些编码需要字符大至 32 位的宽字符串。您可能想要使用 libiconv 等库。
-
@W.Goeman:一个重要的问题:
std::wstring不幸 依赖于实现(Windows 上 16 位宽的字符,Linux 上 32 位宽),因此它是 i>不够。
标签: c++ character-encoding wstring