无法使用 UTF8 编码转换 HttpResponseMessage

Aen*_*ima 3 c# windows utf-8 character-encoding windows-phone-8.1

我正在努力解决通常的转换问题,但不幸的是我无法找到任何适合我的具体问题的内容。

\n\n

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

\n\n
string message = await result.Content.ReadAsStringAsync();\nbyte[] messageBytes = Encoding.UTF8.GetBytes(message);\nstring newmessage = Encoding.UTF8.GetString(messageBytes, 0, messageBytes.Length);\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

我还阅读了一些答案,例如How to conversion a UTF-8 string into Unicode? 但这个解决方案对我不起作用。这是解决方案代码:

\n\n
public static string DecodeFromUtf8(this string utf8String)\n{\n   // copy the string as UTF-8 bytes.\n   byte[] utf8Bytes = new byte[utf8String.Length];\n   for (int i=0;i<utf8String.Length;++i) {\n      //Debug.Assert( 0 <= utf8String[i] && utf8String[i] <= 255, "the char must be in byte\'s range");\n      utf8Bytes[i] = (byte)utf8String[i];\n   }\n\n   return Encoding.UTF8.GetString(utf8Bytes,0,utf8Bytes.Length);\n}\n\nDecodeFromUtf8("d\\u00C3\\u00A9j\\u00C3\\u00A0"); // d\xc3\xa9j\xc3\xa0\n
Run Code Online (Sandbox Code Playgroud)\n\n

我注意到,当我使用像这样的简单字符串尝试上述解决方案时

\n\n
string str = "Comunit\\u00c3\\u00a0"\n
Run Code Online (Sandbox Code Playgroud)\n\n

DecodeFromUtf8方法工作正常,问题是当我使用响应消息时

\n\n

任何建议将不胜感激

\n

Aen*_*ima 5

我自己解决了这个问题。我发现服务器响应是 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);
 }
Run Code Online (Sandbox Code Playgroud)