0

我很努力与通常的转换问题,但不幸的是,我一直无法找到任何具体问题。无法转换UTF8编码HttpResponseMessage

我的应用程序正在接收来自php服务器的UTF8编码的System.Net.Http.HttpResponseMessage,其中包含一些像\ u00c3 \ u00a0(à)这样的字符,我无法将它们转换。

string message = await result.Content.ReadAsStringAsync(); 
byte[] messageBytes = Encoding.UTF8.GetBytes(message); 
string newmessage = Encoding.UTF8.GetString(messageBytes, 0, messageBytes.Length); 

这只是我的尝试之一,但没有任何反应,则resultring串仍然有\ u00c3 \ u00a0字符。

我也读过一些答案,如How to convert a UTF-8 string into Unicode?但这种解决方案不适合我。这是解决方案代码:

public static string DecodeFromUtf8(this string utf8String) 
{ 
    // copy the string as UTF-8 bytes. 
    byte[] utf8Bytes = new byte[utf8String.Length]; 
    for (int i=0;i<utf8String.Length;++i) { 
     //Debug.Assert(0 <= utf8String[i] && utf8String[i] <= 255, "the char must be in byte's range"); 
     utf8Bytes[i] = (byte)utf8String[i]; 
    } 

    return Encoding.UTF8.GetString(utf8Bytes,0,utf8Bytes.Length); 
} 

DecodeFromUtf8("d\u00C3\u00A9j\u00C3\u00A0"); // déjà 

我注意到,当我尝试用一​​个简单的字符串,上述方案类似

string str = "Comunit\u00c3\u00a0" 

DecodeFromUtf8方法效果很好,但问题是,当我用我的响应消息。

任何意见将不胜感激

+0

为什么你通过不使用“newmessage”连接变量“消息”的原始消息? – Janak

+0

如果你指的是我已经删除它的调试行,这是一个错字 – Aenima

回答

1

我已经解决了自己这个问题。我发现,服务器的响应是UTF8 JSON的ISO字符串,所以我不得不删除JSON转义字符,然后将ISO转换成UTF8

所以我不得不做以下几点:

private async Task<string> ResponseMessageAsync(HttpResponseMessage result) 
{ 
    string message = await result.Content.ReadAsStringAsync(); 
    string parsedString = Regex.Unescape(message); 
    byte[] isoBites = Encoding.GetEncoding("ISO-8859-1").GetBytes(parsedString); 
    return Encoding.UTF8.GetString(isoBites, 0, isoBites.Length); 
}