无法使用UTF8编码转换HttpResponseMessage

时间:2015-11-06 09:13:44

标签: c# utf-8 character-encoding windows-phone-8.1 windows-applications

我正在努力解决通常的转换问题,但遗憾的是我无法找到解决我特定问题的任何内容。

我的应用程序从php服务器接收一个System.Net.Http.HttpResponseMessage,UTF8编码,包含一些字符,如\ u00c3 \ u00a0(à),我无法转换它们。

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

这只是我的尝试之一,但没有任何反应,结果字符串仍然有\ 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 方法完美无缺,问题出在我使用响应消息时。

非常感谢任何建议

2 个答案:

答案 0 :(得分:1)

我已经解决了这个问题。我发现服务器响应是一个utf-8 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);
 }

答案 1 :(得分:0)

对我来说,工作方式从:

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

收件人:

byte[] bytes = await result.Content.ReadAsByteArrayAsync();
Encoding utf8 = Encoding.UTF8;
string newmessage = utf8.GetString(bytes);