之前一直以为 C++11 的 std::wstring 就是为了 UTF-8 设计的,后来看了 UTF-8 的相关规范,才明白不是那么一回事。
现在我有一个字符串,是 UTF-8 编码的,如下:
abcABC123 中文
我需要逐字符索引,大致代码如下:
for(auto c:str)
{
std::cout << c << std::endl;
}
需要这样的结果:
a
b
c
A
B
C
1
2
3
中
文
不知道有什么方法可以优雅地实现这个功能?
====================分割线====================
试过这些写法,都不可行。
1
#include <iostream>
#include <string>
int main()
{
std::string str = "abcABC123 中文";
for(auto c:str)
{
std::cout << c << std::endl;
}
return 0;
}
# g++ a.cpp -std=c++11
# ./a.out
a
b
c
A
B
C
1
2
3
▒
▒
▒
▒
▒
▒
2
#include <iostream>
#include <string>
int main()
{
std::wstring str = L"abcABC123 中文";
for(auto c:str)
{
std::wcout << c << std::endl;
}
return 0;
}
# g++ a.cpp -std=c++11
# ./a.out
a
b
c
A
B
C
1
2
3
?
?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.