Как исправить проблемы кодирования только с некоторыми символами в строке? - PullRequest
0 голосов
/ 27 декабря 2018

У меня проблемы с обработкой строк UTF-8 из JSON.Когда я выполняю POST-запрос для извлечения JSON UTF-8 в API, некоторые символы не могут быть закодированы, и он будет поврежден.

Я правильно установил кодировку в UTF-8 в запросе и большую частьакцентированные символы преобразованы правильно, но каким-то образом "ã" не может быть заключен в определенную точку моей строки.

Пример:

У меня есть строка "entendeu que a pretensão de compmentação de ações buscada pelos adlosirentes de linhas telefônicas deve ter como referenceência o valor patrimonial da aç��o apurado com base no balancete "

В приведенном выше примерев слове «дополнения» проблемный символ преобразуется правильно, но в «я» возникают проблемы с кодировкой.

Может кто-нибудь мне помочь?Вы уже видели это?

Спасибо!

РЕДАКТИРОВАТЬ: Я использовал Fiddler 4, чтобы прослушать мой запрос, и когда я получаю текст от инспектора, это нормально, нов VisualStudio 2017 строка повреждена только в этой точке.

РЕДАКТИРОВАТЬ 2: Я использовал HexView из Fiddler и увидел, что каждый «ã» идет с кодом 0xC3A3, правильныеи испорченный.Я думаю, что что-то не так с библиотекой, которую я использую для выполнения веб-запроса.Я протестирую некоторые другие библиотеки, чтобы увидеть, если проблемы все еще возникают.Спасибо всем за помощь!

РЕДАКТИРОВАТЬ 3 Нашел эту ссылку: http://www.fileformat.info/info/unicode/char/e3/index.htm Помогает ли кто-нибудь понять мою проблему?

РЕДАКТИРОВАТЬ4 Поиск немного больше о шестнадцатеричном коде, который я получаю, и нашел это: https://www.fileformat.info/info/unicode/char/c3a3/index.htm. Я думаю, что проблема происходит, когда код пытается преобразовать C3A3 из UTF-8 в UTF-16 (String Encondingдля C # в VisualStudio), но я не знаю, как сделать это преобразование правильно.Я буду продолжать копать, и если я найду что-нибудь еще, я обновлю здесь.

1 Ответ

0 голосов
/ 27 декабря 2018

Я пытался закодировать строку в разные кодировки и обратно в UTF-8, но мне ни разу не удалось получить такую ​​же ошибку декодирования.

Это наводит меня на мысль, что с оригиналом что-то не такстрока, так как она правильно декодирует слово "compmentação ", может ли быть слово" aç��o "каким-то образом неправильным или ошибочным?

Правка добавлены некоторые тесты

Я пытался преобразовать все эти кодировки в UTF-8, и ни один из них не преобразовал некоторые ã правильно, но не другие:

var str = "entendeu que a pretensão de complementação de ações" + 
" buscada pelos adquirentes de linhas telefônicas deve ter como" +
" referência o valor patrimonial da ação apurado com base no balancete";

WriteAsUtf8(str, Encoding.UTF8);
WriteAsUtf8(str, Encoding.UTF7);
WriteAsUtf8(str, Encoding.ASCII);
WriteAsUtf8(str, Encoding.GetEncoding("ISO-8859-1"));
WriteAsUtf8(str, Encoding.GetEncoding("ISO-8859-2"));
WriteAsUtf8(str, Encoding.GetEncoding("ISO-8859-3"));
WriteAsUtf8(str, Encoding.GetEncoding("ISO-8859-4"));
WriteAsUtf8(str, Encoding.GetEncoding("ISO-8859-5"));
WriteAsUtf8(str, Encoding.GetEncoding("ISO-8859-6"));
WriteAsUtf8(str, Encoding.GetEncoding("ISO-8859-7"));
WriteAsUtf8(str, Encoding.GetEncoding("ISO-8859-8"));
WriteAsUtf8(str, Encoding.GetEncoding("ISO-8859-9"));
WriteAsUtf8(str, Encoding.GetEncoding("ISO-8859-13"));
WriteAsUtf8(str, Encoding.GetEncoding("ISO-8859-15"));
WriteAsUtf8(str, Encoding.GetEncoding("windows-1250"));
WriteAsUtf8(str, Encoding.GetEncoding("windows-1251"));
WriteAsUtf8(str, Encoding.GetEncoding("windows-1252"));
WriteAsUtf8(str, Encoding.GetEncoding("windows-1253"));
WriteAsUtf8(str, Encoding.GetEncoding("windows-1254"));
WriteAsUtf8(str, Encoding.GetEncoding("windows-1255"));
WriteAsUtf8(str, Encoding.GetEncoding("windows-1256"));
WriteAsUtf8(str, Encoding.GetEncoding("windows-1257"));
WriteAsUtf8(str, Encoding.GetEncoding("windows-1258"));

void WriteAsUtf8(string text, Encoding encoding)
{
    var bytes = encoding.GetBytes(text);
    var name = encoding.EncodingName;
    var description = $"{name}:{new string(' ', 35 - name.Length)}";
    Console.WriteLine($"{description}{Encoding.UTF8.GetString(bytes)}");
}

Это были результаты:

Unicode (UTF-8):               entendeu que a pretensão de complementação de ações buscada pelos adquirentes de linhas telefônicas deve ter como referência o valor patrimonial da ação apurado com base no balancete
Unicode (UTF-7):               entendeu que a pretens+AOM-o de complementa+AOcA4w-o de a+AOcA9Q-es buscada pelos adquirentes de linhas telef+APQ-nicas deve ter como refer+AOo-ncia o valor patrimonial da a+AOcA4w-o apurado com base no balancete
US-ASCII:                      entendeu que a pretens?o de complementa??o de a??es buscada pelos adquirentes de linhas telef?nicas deve ter como refer?ncia o valor patrimonial da a??o apurado com base no balancete
Western European (ISO):        entendeu que a pretens�o de complementa��o de a��es buscada pelos adquirentes de linhas telef�nicas deve ter como refer�ncia o valor patrimonial da a��o apurado com base no balancete
Central European (ISO):        entendeu que a pretensao de complementa�ao de a�oes buscada pelos adquirentes de linhas telef�nicas deve ter como referencia o valor patrimonial da a�ao apurado com base no balancete
Latin 3 (ISO):                 entendeu que a pretensao de complementa�ao de a�oes buscada pelos adquirentes de linhas telef�nicas deve ter como refer�ncia o valor patrimonial da a�ao apurado com base no balancete
Baltic (ISO):                  entendeu que a pretens�o de complementac�o de ac�es buscada pelos adquirentes de linhas telef�nicas deve ter como referencia o valor patrimonial da ac�o apurado com base no balancete
Cyrillic (ISO):                entendeu que a pretensao de complementacao de acoes buscada pelos adquirentes de linhas telefonicas deve ter como referencia o valor patrimonial da acao apurado com base no balancete
Arabic (ISO):                  entendeu que a pretensao de complementacao de acoes buscada pelos adquirentes de linhas telefonicas deve ter como referencia o valor patrimonial da acao apurado com base no balancete
Greek (ISO):                   entendeu que a pretensao de complementacao de acoes buscada pelos adquirentes de linhas telefonicas deve ter como referencia o valor patrimonial da acao apurado com base no balancete
Hebrew (ISO-Visual):           entendeu que a pretensao de complementacao de acoes buscada pelos adquirentes de linhas telefonicas deve ter como referencia o valor patrimonial da acao apurado com base no balancete
Turkish (ISO):                 entendeu que a pretens�o de complementa��o de a��es buscada pelos adquirentes de linhas telef�nicas deve ter como refer�ncia o valor patrimonial da a��o apurado com base no balancete
Estonian (ISO):                entendeu que a pretensao de complementacao de ac�es buscada pelos adquirentes de linhas telefonicas deve ter como referencia o valor patrimonial da acao apurado com base no balancete
Latin 9 (ISO):                 entendeu que a pretens�o de complementa��o de a��es buscada pelos adquirentes de linhas telef�nicas deve ter como refer�ncia o valor patrimonial da a��o apurado com base no balancete
Central European (Windows):    entendeu que a pretensao de complementa�ao de a�oes buscada pelos adquirentes de linhas telef�nicas deve ter como referencia o valor patrimonial da a�ao apurado com base no balancete
Cyrillic (Windows):            entendeu que a pretensao de complementacao de acoes buscada pelos adquirentes de linhas telefonicas deve ter como referencia o valor patrimonial da acao apurado com base no balancete
Western European (Windows):    entendeu que a pretens�o de complementa��o de a��es buscada pelos adquirentes de linhas telef�nicas deve ter como refer�ncia o valor patrimonial da a��o apurado com base no balancete
Greek (Windows):               entendeu que a pretensao de complementacao de acoes buscada pelos adquirentes de linhas telefonicas deve ter como referencia o valor patrimonial da acao apurado com base no balancete
Turkish (Windows):             entendeu que a pretens�o de complementa��o de a��es buscada pelos adquirentes de linhas telef�nicas deve ter como refer�ncia o valor patrimonial da a��o apurado com base no balancete
Hebrew (Windows):              entendeu que a pretens?o de complementa??o de a??es buscada pelos adquirentes de linhas telef?nicas deve ter como refer?ncia o valor patrimonial da a??o apurado com base no balancete
Arabic (Windows):              entendeu que a pretens?o de complementa�?o de a�?es buscada pelos adquirentes de linhas telef�nicas deve ter como refer�ncia o valor patrimonial da a�?o apurado com base no balancete
Baltic (Windows):              entendeu que a pretens?o de complementa??o de a?�es buscada pelos adquirentes de linhas telef?nicas deve ter como refer?ncia o valor patrimonial da a??o apurado com base no balancete
Vietnamese (Windows):          entendeu que a pretens?o de complementa�?o de a�?es buscada pelos adquirentes de linhas telef�nicas deve ter como refer�ncia o valor patrimonial da a�?o apurado com base no balancete
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...