2016-08-23 10 views
-1

この質問をしたり、別のコードを試しても何日間かを過ごしても、動作させることができません。' u0 ***'を含むUTF-8テキストをwindows-12 **コードページに変換する方法

私はHttpWebRequestのWeb応答テキストをUTF-8で持っています。非ラテン文字は '\ u0 ***'のように表示されます。

StreamReaderのエンコードパラメータを設定して、Encoding.GetEncoding(1251)Encoding.ConvertUTF8Encodingの文字列をさまざまな方法で変換しようとしました。結果は、出力では非ラテン文字に対しても '\ u0 ***'と同じままです。

本当に何が間違っているかわかりません。

EDIT

私は、Web応答に最小限の作業コードを提供しています。

 UTF8Encoding objUtf = new UTF8Encoding(); 
     HttpWebResponse ApiResponse = (HttpWebResponse)ApiRequest.GetResponse(); 

     var objEncoding = Encoding.UTF8; 
     var objResponseReader = new StreamReader(ApiResponse.GetResponseStream(), objEncoding); 
     string strResponseText = Encoding.ASCII.GetString(Encoding.Convert(objUtf, Encoding.ASCII, objUtf.GetBytes(objResponseReader.ReadToEnd()))); 
     objResponseReader.Close(); 

デバッガとビューに表示されている内容。

{"result":"success","product_id":["4","1","2","3","6","5","11","12","10","21","20"],"name":["\u0424\u0438\u043b\u0430\u0434\u0435\u043b\u044c\u0444\u0438\u044f \u0440\u043e\u043b\u043b","\u041a\u0430\u043d\u0430\u0434\u0430 \u0440\u043e\u043b\u043b","\u041a\u0430\u043f\u043f\u0430 \u0440\u043e\u043b\u043b","\u0421\u044f\u043a\u0435 \u0440\u043e\u043b\u043b","\u041c\u0430\u0440\u0433\u0430\u0440\u0438\u0442\u0430","\u0412\u0435\u0433\u0435\u0442\u0430\u0440\u0438\u0430\u043d\u0441\u043a\u0430\u044f","Kozel","\u0411\u0430\u043b\u0442\u0438\u043a\u0430 7","Coca-cola","\u0421\u043e\u0435\u0432\u044b\u0439 \u0441\u043e\u0443\u0441","\u041f\u0430\u043b\u043e\u0447\u043a\u0438"],"price":["150","240","60","90","310","420","100","80","50","0","0"]} 

SOLUTION

あなたは、プレーンテキストを使用している場合は、次のコードを使用することができます。

 Regex objExpression = new Regex(@"\\[uU]([0-9A-Fa-f]{4})"); 
     string strConverted = objExpression.Replace(strResponseText, match => ((char)Int32.Parse(match.Value.Substring(2), NumberStyles.HexNumber)).ToString()); 

あなたがJSONデータ、JavaScriptSerializerで作業をしている場合は、全体の仕事をしていません。

ありがとうございました。申し訳ありませんが、私は本当にASP.NETプログラミングの初心者です。

+0

「表示」とはどういう意味ですか、どのように表示されますか?なぜあなたは別のコードページを使用しようとしていますか? –

+0

問題を示す[mcve]を提供してください。 ASCII以外の文字がないように思えますが、文字通り文字列に '\ uXXXX'があります。エンコードに手を出せずに、それらを参照する文字に魔法に変換します。 –

+0

@Charles Mager、私はそれが本当にそうだと信じ始めました。 –

答えて

1

WebResponseエンコーディングがUTF-8であることが確かであれば、応答ストリームを他のエンコーディングと変換する必要はありません。例のコードは次のようになります。

var ApiResponse = (HttpWebResponse)ApiRequest.GetResponse(); 
using (var response = ApiResponse.GetResponseStream()) 
{ 
    using (var reader = new StreamReader(response, Encoding.UTF8)) 
    { 
     var str = reader.ReadToEnd(); 
    } 
} 
関連する問題