Wstringと文字列の違い



Wstring String Difference



中国では、wstringの存在は主に漢字の存在によるものです。
  1. typedef basic_string<char, char_traits<char>, allocator<char> >
  2. string
  3. typedef basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> >
  4. wstring
違いはcharまたはwchar_tにあります
  1. #ifndef _WCHAR_T_DEFINED
  2. typedef unsigned short wchar_t
  3. #define _WCHAR_T_DEFINED
  4. #endif
したがって、wchar_tは基本的に符号なしの短い、サイズが2バイト、つまり16ビットです。
一般にASCIIエンコーディングを満たすために使用される狭い文字(charの単位)ワイド文字(UNICODEエンコーディングを満たすために一般的に使用される)1単位2文字
つまり、それぞれが文字を表すワイド文字は、実際には16ビット、つまり2文字のサイズを占めます。漢字を表すには16ビットが必要です。
以下はテスト例です:
  1. string s = 'Hello there!'
  2. cout << s[1] << endl
出力は「良好」だと思いますが、実際には文字化けしています。正しい出力方法は次のとおりです
  1. string s = 'Hello there!'
  2. cout << s[2] << s[3] << endl
wstringを使用すると、stringのような漢字を出力できます。
  1. wcout.imbue(std::locale('chs'))
  2. wstring ws = L 'Hello!'
  3. wcout << ws[1] << endl