2

WP7 アプリケーションに文字列があります。

この文字列を UTF-8 形式でサーバーに送信する必要があります。文字列を UTF-8 形式に変換するにはどうすればよいですか?

私はこれまでにこれを試しました:

UTF8Encoding utf8 = new UTF8Encoding();

byte[] encodedBytes = utf8.GetBytes(jsonString);

string jsonStringUTF8 = Convert.ToString(encodedBytes);

ここで、jsonString は UTF8 形式で必要な文字列です。

ただし、次のようにして新しいjsonStringUTF8を印刷しようとすると:

System.Diagnostics.Debug.WriteLine("JsonStringUTF8 is: {0}", jsonStringUTF8);

私が得るものは:

JsonStringUTF8 は: System.Byte[]

何か案は?

4

2 に答える 2

2

byteを使用して配列を文字列に変換することはできませんConvert.ToString。UTF8 でエンコードされたバイト配列であるため、デコードする必要があります。

string jsonStringUTF8 = Encoding.UTF8.GetString(encodedBytes, 0,encodedBytes.Length)
于 2013-04-18T17:32:55.573 に答える
1

CLR の文字列は、仕様によると、UTF-16 でエンコードされた Unicode 文字です。文字通り、UTF-8文字列自体を作成することはできません。UTF-8 でエンコードさbyte[]れたものは、次のようなコードで [UTF-16] 文字列に戻すことができます。

byte[]  rawUtf8EncodedData = ReadSomeUtf8EncodedBytes() ;
string  decodedString      = Encoding.UTF8.GetString( rawUtf8EncodedData ) ;

UTF8Decoderを明示的に作成し、それを使用して変換を行うこともできます。または (最後の手法として)System.IO機能を使用することもできます。

string value ;

byte[]  rawUtf8EncodedData = ReadSomeUtf8EncodedBytes() ;
using ( MemoryStream utf8Stream = new MemoryStream( rawUtf8EncodedData ) )
using ( StreamReader reader = new StreamReader( utf8Stream , Encoding.UTF8 ) )
{
  value = reader.ReadToEnd() ;
}

ソース データに BOM が含まれている場合、変換された文字列には表示されず、アクセスもできませんが、BOM が存在することに注意してください。BOM が存在しないはずの BOM を XML リーダーがバーフィングすることで、そのことに少し気付きました。

文字列に関する Jon Skeet の記事 ( http://csharpindepth.com/Articles/General/Strings.aspx ) と、Unicode とエンコードに関する記事 ( http://csharpindepth.com/Articles/General/Unicode.aspx ) をご覧ください

于 2013-04-18T18:48:29.650 に答える