2016-04-04 10 views
0

json.netを使用して、サーバーからjson形式で送信されたデータを読み取っています。サーバーは、jsonでutf-8として送信するすべての文字列型データをエンコードします。 C#でデータを読み込むようになりましたjson.netから受信したutf8文字列を正しく処理します。

私はこのような何か:私はC#で文字列のデフォルトエンコーディングがUTF-16(ユニコード)であるのに対し、文字列sは、UTF-8形式になりましたと仮定しstring s = json.Value<string>("data");

を。

文字列をUnicodeに変換するには、これは正しいですか?

byte[] bytes = Encoding.Unicode.GetBytes(s); 
string unicode = Encoding.UTF8.GetString(bytes); 

私は(私が思う)、その後sからの生のバイトがUnicodeを取得するには、UTF-8デコーダにそれを渡すことですが、私は正確にEncoding.Unicode.GetBytesが私を与える、または私がすべきかわからないんだけど、何をしたいです代わりに使用してください。

+0

これを二重解析することはできません。しかし、.NETのすべての文字列はUTF16なので、最初はあなたの文字列に何が間違っていますか? –

+0

文字列がutf-8として受け取られていますが、私は何かをしなければならないと思っていましたが、もしjson.netが自動的にこれを処理するなら、あなたが言うように大丈夫です。 – DaedalusAlpha

+0

私はそれを交換する必要があると思います。 'Encoding.UTF8.GetBytes(s)'、そして 'Encoding.Unicode.GetString(bytes)'です。この方法で、UTF8をUnicodeに変換します。 –

答えて

0

stringオブジェクトが.NETのare encoded in UTF-16にあるため、何も変換する必要はありません。

変更が必要な場合は、JSON.NETが文字列を逆シリアル化する場所を変更する必要があります。つまり、解析することはできません。受信したJSON文字列は、すでに特定のエンコーディングのために解釈されています。元のバイトなしでそこから戻ることはできません。

+0

受け取ったjsonデータが '{" data ":"str¶ "}'のように見える場合は、C#文字列とまったく同じように見えるので間違いなく変換する必要があります。 – DaedalusAlpha

+0

もう一方の端ですべてがうまくいっていますか? –

+1

あなたは正しいです。 jsonによって解析された文字列は、 'Encoding.UTF8'ではなく' Encoding.Default'を使ってソケットからの生データから作成されました。 – DaedalusAlpha

関連する問題