次の問題に取り組んでいます。私は VS10 で作業しており、.NET Framework 2.0 を使用しています。C# でのコーディング。
テキストをwebserviceに渡す単純なエディターを作成しています。.NET が UTF-16 を使用していることは知っています (デフォルトは LE だと思いますか? ビッグ エンディアンが必要です)。任意のエディターで動作できるようにしたいので、BOM を添付します。問題は、httml を通過すると UTF-8 に変更されることですか? または、少なくとも次のエラーからはそう思われます。
Client found response content type of 'text/html;
charset=UTF-8', but expected 'text/xml'.
The request failed with an empty response.
編集:ドキュメントは、すべてのプロパティのエンコーディングが BOM マーカーなしの UTF-8 であることを警告しています。editorTextString はプロパティの 1 つです。ただし、アップロードするファイルの内容は BOM 付きの UTF-16BE でなければなりません。.net がエンコーディングを自動的に変換するかどうかを確認しましたが、そうではありません。または、少なくとも漢字は ? になります。したがって、テキストを、現在の BOM なしの UTF-8 ではなく、UTF-16BE WITH BOM に再エンコードまたは変換する必要があります。
私はたくさんの例を見てきましたが、ここで何が間違っているのかわかりません。誰かがアドバイスを提供したり、コードを修正したりできますか? (はい、ユニコードに関する Jon の本当にクールな記事も読みました :)) 理論は明らかですが、実際の実践には欠けています。
// Convert to UTF-16 Big Endian
Encoding leUnicode = Encoding.Unicode;
Encoding beUnicode = Encoding.BigEndianUnicode;
byte[] editorTextBytesLE = leUnicode.GetBytes(editorTextString);
Console.WriteLine("Little Endian - Encoded bytes:");
foreach (Byte b in editorTextBytesLE)
{
Console.Write("[{0}]", b);
}
Console.WriteLine();
byte[] editorTextBytesBE = Encoding.Convert(leUnicode, beUnicode, editorTextBytesLE);
Console.WriteLine("BIG ENDIAN - Encoded bytes:");
foreach (Byte b in editorTextBytesBE)
{
Console.Write("[{0}]", b);
}
Console.WriteLine();
String decodedString = UnicodeEncoding.BigEndianUnicode.GetString(editorTextBytesBE);
Console.WriteLine();
Console.WriteLine("Decoded bytes:");
Console.WriteLine(decodedString);
// inserting UTF-16BE BOM marker, which eases recognition for any editor
byte[] editorTextBytesToSend = { 0xfe, 0xff };
editorTextBytesToSend.CopyTo(editorTextBytesBE, 2);
File.WriteAllText(fileName, decodedString);
Console.WriteLine("Uploading {0} to {1} ...", fileName, myURL);
// Upload the file to the URL
editorTextBytesBE = myWebClient.UploadFile(myURL, "PUT", fileName);
ビッグエンディアンに切り替えるものを見つけることができませんでしたが、UTF-8に切り替えるいくつかの例(残念ながら動作しませんでした)を見てきました。コードをUTF-16BEにするためのヘルプ、例、またはリンクをいただければ幸いです。