0

次の問題に取り組んでいます。私は 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にするためのヘルプ、例、またはリンクをいただければ幸いです。

4

3 に答える 3

1

部分的な答え:

次のコードは、何かを挿入しているようには見えません。代わりに、位置 2 と 3 の 2 バイトを BOM で上書きします。最初の 2 をスキップします。

 // inserting UTF-16BE BOM marker, which eases recognition for any editor
    byte[] editorTextBytesToSend = { 0xfe, 0xff };
    editorTextBytesToSend.CopyTo(editorTextBytesBE, 2);
于 2012-10-03T15:56:54.250 に答える
0

私はなんとか次のコードで作業することができました:

byte [] BOMTextBytesToSend = {0xfe、0xff};

byte [] editorTextBytesToSend = System.Text.Encoding.BigEndianUnicode.GetBytes(editorTextString);

BOMTextBytesToSend.CopyTo(editorTextBytesToSend、0);

于 2012-10-30T15:10:26.287 に答える
0

UTF-X エンコーディングのいずれかで BOM を含むファイルを作成するには、正しいエンコーディングで TextWriter を作成するだけです。

using(var writer = 
    new StreamWriter(fileName, new Encoding.UnicodeEncoding(true,true,true))
{
   writer.Write(editorTextString);
}

BOM を提供するUnicodeEncodingコンストラクターを使用します。

補足: 問題がこのまれなエンコーディングの使用に関連していない可能性は十分にありますが、コードが現在実行しようとしていることが修正されるはずです。

于 2012-10-03T16:29:32.307 に答える