MultiByteToWideChar を使用して UTF-8 文字列を UTF-16 に変換する C++ コード スニペットがあります。
C++ の場合、入力が "Hôtel" の場合、出力は正しい "Hôtel" です。
C# の場合、入力が "Hôtel" の場合、出力は "Hôtel" になりますが、これは正しくありません。
UTF8 から UTF16 に変換する C# コードは次のようになります。
Encoding.Unicode.GetString(
Encoding.Convert(
Encoding.UTF8,
Encoding.Unicode,
Encoding.UTF8.GetBytes(utf8)));
C++ では、変換コードは次のようになります。
MultiByteToWideChar(
CP_UTF8, // convert from UTF-8
0, // default flags
utf8.data(), // source UTF-8 string
utf8.length(), // length (in chars) of source UTF-8 string
&utf16[0], // destination buffer
utf16.length() // size of destination buffer, in wchar_t's
)
C++ で取得したのと同じ結果を C# でも取得したいと考えています。C# コードに何か問題がありますか?