我想了解常规std::string和std::map操作如何处理字符串中的Unicode代码单元.
示例代码:
include <iostream>
#include "sys/types.h"
using namespace std;
int main()
{
std::basic_string<u_int16_t> ustr1(std::basic_string<u_int16_t>((u_int16_t*)"????", 4));
std::basic_string<u_int16_t> ustr2(std::basic_string<u_int16_t>((u_int16_t*)"abcd", 4));
for (int i = 0; i < ustr1.length(); i++)
cout << "Char: " << ustr1[i] << endl;
for (int i = 0; i < ustr2.length(); i++)
cout << "Char: " << ustr2[i] << endl;
if (ustr1 == ustr2)
cout << "Strings are equal" << endl;
cout << "string length: " << ustr1.length() << "\t" << ustr2.length() << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这些字符串包含泰语字符和ascii字符,后面使用的意图basic_string<u_int16_t>是便于存储不能容纳在单个字节内的字符.代码在Linux机器上运行,其编码类型为en_US.UTF-8.输出是:
$ ./a.out
Char: 47328
Char: 57506
Char: 42168
Char: 47328
Char: 25185
Char: 25699
Char: 17152
Char: 24936
string length: 4 4
Run Code Online (Sandbox Code Playgroud)
几个问题:
输出中的字符值是否与en_US.UTF-8代码点对应?如果没有,他们是什么?
请问std::string像运营商==,!=,<等,能够与Unicode码点的工作?如果是这样,它只是比较相应位置的每个代码点吗?会std::map在类似的线上工作吗?
将语言环境更改为UTF-16会导致字符串存储为UTF-16代码点吗?
谢谢!
我想了解常规
std::string和std::map操作如何处理字符串中的Unicode代码单元.
他们没有.
std::string是一个chars或字节序列.它不是考虑任何编码的"高级"字符串.您必须自己这样做,例如使用专用于此目的的库,例如ICU.
从std::string(ie std::basic_string<char>)切换到std::basic_char<u_int16_t>不改变; 它只是意味着你有一系列"宽"字符.
而且std::map与此毫无关系.
进一步阅读:
| 归档时间: |
|
| 查看次数: |
477 次 |
| 最近记录: |