c3 82 c2 bf 是什么字符编码?

问题描述 投票:0回答:6

我有一个文本数据源,其中包括字节序列 c3 82 c2 bf。在上下文中,我认为它应该是大写的希腊 Phi 符号 (Φ)。

无论如何我无法弄清楚正在使用什么编码;我正在编写一个 Python 脚本来将此数据处理到需要 Unicode 的数据库中,并且它会在此特定数据序列上引发异常。

对于如何处理有什么建议吗?

unicode encoding
6个回答
19
投票

解释为 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,这与实际数据不太相似。有关数据来源的信息可能有助于猜测可能发生了什么转码。


11
投票

这可能是

Ñ
字符的双重转换。

Ñ
UTF-8 中的字符是:
0xc391

如果您尝试将已在 UTF-8 中编码的 Ñ 字符从

LATIN-1
转换为 UTF-8,您将得到:
0xc382c2bf

为什么?

  1. 0xc382
    UTF-8 翻译自 LATIN-1
    0xc3
    字符
    Ã
    (带有波形符的 A)
  2. 0xc2bf
    ¿
    字符,这是当您无法从 LATIN-1 转换字符时得到的字符(
    0x91
    LATIN-1
  3. 中的无效字符)

4
投票

FWIW,我最终得到了来自

c3 82 c2 bf
 
。我没有深入研究转换,因为我可以简单地扔掉那部分代码。可以说
 
位于由 wordpress (php) 插件处理的 html 电子邮件模板中。


0
投票

我不知道原因。但也许有一种可能的情况。

二进制 x0xx 转换为 0xC2 x0xx

二进制 x1xx 转换为 0xC3 x0xx

所以添加了很多c2和c3。

这发生在哪里?在 url 查询字符串中发送非 ascii 进行 ajax 调用,Flask 服务器将执行此操作。


0
投票

这与 ¿ 字符从 UTF-8 到 IS0-8859-1 的双重转换一致。

这是一个 bash 交互演示了这一点。请注意,我的 bash 控制台本身使用 UTF-8 编码(如前两个命令所示)。

$ echo $LC_ALL
en_US.UTF-8
$ echo -n '¿' | hexdump -C
00000000  c2 bf                                             |..|
00000002
$ echo -n '¿' | iconv -f iso-8859-1 -t utf-8 | hexdump -C
00000000  c3 82 c2 bf                                       |....|
00000004

其他常见的非 ASCII 字符也有类似的变体,例如:

$ echo -n 'í' | hexdump -C
00000000  c3 ad                                             |..|
00000002
$ echo -n 'í' | iconv -f iso-8859-1 -t utf-8 | hexdump -C
00000000  c3 83 c2 ad                                       |....|
00000004

-1
投票

我使用 $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);
© www.soinside.com 2019 - 2024. All rights reserved.