在处理JSON中的UTF-8字符串时遇到一些麻烦。当我执行POST请求以在API中检索UTF-8 JSON时,某些字符无法编码,并且会损坏。
我在请求中将字符集正确设置为UTF-8,并且大多数加重字符都正确转换,但是不知何故,“?”不能包含在字符串的特定位置。
示例:
我有字符串“ entendeu que apretensãode complementação deaçõesbuscada pelos adquirentes de linhastelefônicasdeve ter comoreferênciao valor patrimonial da aç��o apurado com没有平衡”
在上面的示例中,单词“complementação”正确地转换了有问题的字符,但在“aç��o”中,我遇到了编码问题。
有人可以帮助我吗?你已经看过吗?
谢谢!
编辑: 我使用Fiddler 4来拒绝请求,当我从检查器中获取文本时就很好了,但是在Visual Studio 2017中,字符串仅在该点被破坏。
编辑2: 我使用了Fiddler的HexView,发现每个“ã”都带有代码0xC3A3,正确的代码和损坏的代码。我认为我用来执行Web请求的库出了点问题。我将测试其他一些库,以查看问题是否仍然存在。谢谢大家的帮助!
编辑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(在Visual Studio中为C#进行字符串编码)时,问题就出现了,但是我不知道如何正确进行此转换。我会继续挖掘,如果发现其他内容,请在此处进行更新。
答案 0 :(得分:0)
我试图将字符串编码为不同的编码,然后再返回UTF-8,但是我丝毫没有遇到相同的解码错误。
这使我认为原始字符串有问题,因为它正确地解码了“complementaçã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