0

Я борюсь с обычной проблемой конверсии, но, к сожалению, я не смог найти что-либо для своей конкретной проблемы.Невозможно преобразовать HttpResponseMessage с кодировкой UTF8

Мое приложение получает System.Net.Http.HttpResponseMessage, с php-сервера, кодированного UTF8, содержащего некоторые символы, такие как \ 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

Я решил себе эту проблему. Я обнаружил, что ответ сервера был ISO строка из utf8 JSON, так что мне пришлось удалить символы 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); 
} 
Смежные вопросы