【问题标题】:What character encoding is c3 82 c2 bf?c3 82 c2 bf是什么字符编码?
【发布时间】:2012-07-18 16:45:31
【问题描述】:

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

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

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

【问题讨论】:

  • 你能发布更多用魔法编码编码的样本数据吗?是什么让你认为它是一个字母?
  • 在上下文中它是“磁通量 \xc3\x82\xc2\xbffa”,它可能应该是 Φfa
  • 这是目前为止唯一的失败数据,所以我只能继续。

标签: unicode encoding


【解决方案1】:

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

【讨论】:

  • 它看起来像一个双编码的 U+00BF,倒置问号。
  • @Keith Thompson,没错!如果你有 U+00BF 并且你 UTF-8 编码它,你会得到字节 C2 BF。如果您错误地将这些字节解释为 U+00C2 和 U+00BF 和 UTF-8 编码它们,您会得到 C3 82 C2 BF,与实际数据一样。
  • “¿”的来源仍然是个问题。我通常认为它是另一个错误转换的结果(可能在 8 位编码之间),但我无法想象它可能是什么。
  • cdn.rawgit.com/tripleee/8bit/master/encodings.html#bf 在任何地方都没有 Φ,但那里还有一些其他有希望的希腊字形。
  • 这是一个 PowerShell 脚本,可以帮助某人确定双编码 utf8 字符串中的内部编码是什么。对于这个特殊字符 ¿,候选对象是 iso-8859-15iso-8859-9iso-8859-1windows-1258windows-1254Windows-1252[System.Text.Encoding]::GetEncodings() | % {"$($_.CodePage) $($_.Name): " + [System.Text.Encoding]::UTF8.GetString( [System.Text.Encoding]::GetEncoding($_.CodePage).GetBytes([System.Text.Encoding]::UTF8.GetString((0xC3, 0x82, 0xC2, 0xBF))) ) }
【解决方案2】:

这可能是Ñ 字符的双重转换。

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

如果您尝试将 LATIN-1 转换为 UTF-8,则 Ñ 字符已以 UTF-8 编码,你会得到:0xc382c2bf

为什么?

  1. 0xc382UTF-8 翻译自 LATIN-1 0xc3 字符 Ã(带波浪号的 A)
  2. 0xc2bf¿ 字符,这是您无法从 LATIN-1 转换字符时得到的字符(0x91LATIN-1 中的无效字符>

【讨论】:

  • 谢谢,但与Ñ无关,这是一篇工程论文,其中 Φ有道理。
  • 很可能,(A with tilde) + (upside ?)any 无意的双重转换的结果。这样一来,就没有办法回到原来的角色了。
【解决方案3】:

FWIW,我最终得到了来自  c3 82 c2 bf。我没有深入研究转换,因为我可以简单地将那部分代码扔掉。只需说  位于由 wordpress (php) 插件处理的 html 电子邮件模板中就足够了。

【讨论】:

【解决方案4】:

我不知道原因。但也许有一个可能的场景。

二进制 x0xx 转换为 0xC2 x0xx

二进制 x1xx 转换为 0xC3 x0xx

所以添加了很多c2和c3。

这发生在哪里?在 ajax 调用的 url 查询字符串中发送非 ascii,Flask 服务器会这样做。

【讨论】:

    【解决方案5】:

    在使用 $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);
    

    【讨论】:

    • 谢谢,但这是一篇工程论文,与货币无关。
    猜你喜欢
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    相关资源
    最近更新 更多