UTF8⇔UTF16 のつづき。
さんにダメ出し食らった。
2byte-UNICODE(UCS2)だと 吉野家の吉(本来は土に口)が表せないんだって。
.NET Framework の System.Text.UTF8Encoding を使うとこんな感じっしょか。
// C++/CLI
using namespace System;
using namespace System::Text;
int main() {
UTF8Encoding enc;
String^ input = L"吉野家の'吉'は土に口"; // 変換元
int utf8Length = enc.GetByteCount(input); // できあがりサイズ
Console::WriteLine(L"length of [{0}] is {1}.\n {2}bytes to encode to UTF8", input, input->Length, utf8Length);
array<Byte>^ utf8bytes = gcnew array<Byte>(utf8Length); // 変換先
enc.GetBytes(input,0,input->Length,utf8bytes,0); // できたポ
String^ output = enc.GetString(utf8bytes, 0, utf8bytes->Length); // 元に戻してみる
Console::WriteLine(L"length of [{0}] is {1}.", output, output->Length);
return 0;
}