我有一个包含字节序列 c3 82 c2 bf 的文本数据源。在上下文中,我认为它应该是一个大写的希腊 Phi 符号 (Φ)。
无论如何,我无法弄清楚正在使用什么编码;我正在编写一个 Python 脚本来将这些数据处理到一个需要 Unicode 的数据库中,并且它会在这个特定的数据序列上抛出一个异常。
关于如何处理它的任何建议?
解释为 UTF-8,c3 82 是“”U+00C2,c2 bf 是“¿”U+00BF,这没有多大意义,但它在技术上是有效的 UTF-8 数据,因此不应报告为字符级数据错误。解释为 UTF-16,它是 Hangul 音节,可能是 CJK 表意文字,取决于字节顺序,但仍然是正式有效的数据,尽管很可能不是什么意思。
这听起来像是双重转换的结果,但很难做出有根据的猜测。如果它代表 Φ,则 UTF-16 格式为 03 A6 或 A6 03,而 UTF-8 格式为 CE A6,与实际数据不太相似。有关数据来源的信息可能有助于猜测可能发生了什么转码。
这可能是Ñ
字符的双重转换。
Ñ
UTF-8中的字符是:0xc391
.
如果您尝试将已用 UTF-8 编码的字符从LATIN-1转换为UTF -8,您将得到:.Ñ
0xc382c2bf
为什么?
0xc382
是来自LATIN-1字符的UTF-8翻译(带波浪号的 A) 0xc3
Ã
0xc2bf
是¿
当您无法从LATIN-1转换字符时得到的字符(在LATIN-10x91
中是无效字符FWIW,我最终c3 82 c2 bf
从
. 我没有深入研究转换,因为我可以简单地将那部分代码扔掉。可以说这
是在由 wordpress (php) 插件处理的 html 电子邮件模板中。
我不知道原因。但也许有一个可能的场景。
二进制 x0xx 转换为 0xC2 x0xx
二进制 x1xx 转换为 0xC3 x0xx
所以添加了很多c2和c3。
这发生在哪里?在 ajax 调用的 url 查询字符串中发送非 ascii,Flask 服务器将执行此操作。
使用 $str = mb_convert_encoding($content, "UTF-8" , "UTF-16LE"); 转换为 utf-8 后,我从外部 utf-16 文档收到了这个字符 \xc3\x82 (PHP)
原始序列是 0xA0 0x00 ,转换器可能将其转换为 NBSP 的含义 .. 它是货币编号中千位分隔符的字符。nbsp 是 \xc2\xa0 所以现在我有成千上万的删除:
$price = str_replace(["\xc2\xa0","\xc3\x82"], '', $price);