Unicode 文字列型の間で変換する方法を探していて、この方法に出会いました。私はその方法を完全には理解していないだけでなく (コメントはありません)、この記事は将来的にはより良い方法があることを暗示しています。
これが最善の方法である場合は、それが機能する理由を教えてください。そうでない場合は、より良い方法の提案を聞きたいと思います.
私の知る限り、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) になる可能性があります。ただし、それを行うコンパイラは知りません。