46

Unicode 文字列型の間で変換する方法を探していて、この方法に出会いました。私はその方法を完全には理解していないだけでなく (コメントはありません)、この記事は将来的にはより良い方法があることを暗示しています。

これが最善の方法である場合は、それが機能する理由を教えてください。そうでない場合は、より良い方法の提案を聞きたいと思います.

4

3 に答える 3

-2

私の知る限り、C++ には UTF-32 との間で変換する標準的な方法はありません。ただし、UTF-16 にはメソッドmbstowcs (Multi-Byte to Wide character string) とその逆のwcstombsがあります。

UTF-32 も必要な場合はiconvが必要です。これは POSIX 2001 にありますが、標準 C にはありません。そのため、Windows ではlibiconvのような置換が必要になります。

mbstowcsの使用方法の例を次に示します。

#include <string>
#include <iostream>
#include <stdlib.h>

using namespace std;

wstring widestring(const string &text);

int main()
{
  string text;
  cout << "Enter something: ";
  cin >> text;

  wcout << L"You entered " << widestring(text) << ".\n";
  return 0;
}

wstring widestring(const string &text)
{
  wstring result;
  result.resize(text.length());
  mbstowcs(&result[0], &text[0], text.length());
  return result;
}

逆は次のようになります。

string mbstring(const wstring &text)
{
  string result;
  result.resize(text.length());
  wcstombs(&result[0], &text[0], text.length());
  return result;
}

Nitpick:はい、わかっています。wchar_t のサイズは実装定義なので、4 バイト (UTF-32) になる可能性があります。ただし、それを行うコンパイラは知りません。

于 2011-08-29T16:31:13.720 に答える