繁体   English   中英

std :: string和std :: map对Unicode字符串的操作

[英]std::string and std::map operations on Unicode string

我想了解常规的std::stringstd::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;
    }

字符串包含泰语字符和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

几个问题:

  1. 输出中的字符值是否对应于en_US.UTF-8代码点? 如果不是,那是什么?

  2. std::string运算符(例如==!=<等)是否可以使用Unicode代码点? 如果是这样,那仅仅是对相应位置中每个代码点的比较吗? std::map可以在相似的行std::map工作吗?

  3. 将语言环境更改为UTF-16会导致字符串存储为UTF-16代码点吗?

谢谢!

我想了解常规的std::stringstd::map操作如何处理Unicode代码单元(如果它们出现在字符串中)。

他们没有。

std::stringcharbytes的序列。 考虑到任何编码,它不是“高级”字符串。 您必须自己进行操作,例如,使用专用于此目的的库(例如ICU)。

std::string (即std::basic_string<char> )切换到std::basic_char<u_int16_t>不会改变该设置; 这仅表示您有一个“宽”字符序列。

std::map完全无关。

进一步阅读:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM