我有这个代码:
string test("?aba");
cout << "Word: " << test << endl;
cout << "Length: " << test.size() << endl;
cout << "Letter: " << test.at(0) << endl;
Run Code Online (Sandbox Code Playgroud)
输出很奇怪:
Word: ?aba
Length: 5
Letter: ?
Run Code Online (Sandbox Code Playgroud)
如您所见,长度应为4,字母为"ż".
如何更正此代码才能正常工作?
你的问题没有提到编码,所以我将在黑暗中采取刺,并说这就是原因.
第一个行动方案:阅读绝对最低每个软件开发人员,绝对必须知道Unicode和字符集(没有借口!).
在那之后,应该清楚的是,不存在诸如"裸字符串"之类的东西 - 每个字符串都以某种方式编码.在你的情况下,它看起来非常像你使用带变音符号的UTF-8编码字符串,在这种情况下,是的,字符串的长度(正确地)报告为5 1,并且第一个代码点可能不是可在您的平台上打印.
1)注意string::size
计数字节(= char
s),而不是逻辑字符甚至代码点.
std::string
在非Windows上通常用于存储UTF8字符串(在2010年这个方面是大多数理智的操作系统的默认编码),但它是一个"哑"的容器,在某种意义上它不知道或不关心你要存储的字节数.它适用于阅读,存储和写作; 但不适合字符串操作.
您需要使用优秀且维护良好的IBM ICU:International Components for Unicode.它是*nix或Windows的C/C++库,大量的研究已经提供了一个文化感知的字符串库,包括快速和准确的不区分大小写的字符串比较.
另一个更容易切换到C++开发人员的好项目是UTF8-CPP
归档时间: |
|
查看次数: |
810 次 |
最近记录: |