【问题标题】:HTML entities appear to contain nonsenseHTML 实体似乎包含废话
【发布时间】:2020-03-31 14:14:39
【问题描述】:
신영 안

上面是html,下面是代码。这是一个名字吗?什么意思?

신옠안

【问题讨论】:

    标签: html unicode encoding utf-8


    【解决方案1】:

    你有一个 double Mojibake,使用不正确的编解码器破坏了数据。

    其实是韩文,一个名字:

    신영 안
    

    或者,如果使用 HTML 实体,这个应该已经被编码为

    신영 안
    

    它翻译成英文为Shin-Young An

    encoded to UTF-8 并按输入代码点分组然后使用十六进制数字显示时,您会得到:

    ec 8b a0
    ec 98 81
    20
    ec 95 88
    

    要产生你所拥有的输出,必须有人:

    • 使用Windows codepage 1252解码上述UTF-8数据,产生

      ì‹<A0>ì˜<81> 안
      

      (其中&lt;A0&gt; 是不间断的空格字符,&lt;81&gt; 是无效的 CP1252 字节,但这在许多解码器中经常被忽略;我已将它们包含在此符号中,因为否则它们不会被可打印)

    • 再次将生成的混乱编码为 UTF-8,以提供以下字节值:

      c3 ac e2 80 b9 c2 a0
      c3 ac cb 9c c2 81
      20
      c3 ac e2 80 a2 cb 86
      

      (分组与上面的正确 UTF-8 匹配)

    • 使用相同的 Windows CP1252 编解码器第二次解码这些 UTF-8 字节,这一次产生:

      ì‹Â<A0>ì˜Â<81> 안
      

      &lt;A0&gt;&lt;81&gt; 字符上的注释相同)

    • 最终将生成的字符编码为 HTML 实体:

      &#195;&#172;&#226;&#8364;&#185;&#194;&#160;&#195;&#172;&#203;&#339;&#194;&#129; &#195;&#172;&#226;&#8364;&#162;&#203;&#8224;
      

    如果您安装了 Python,那么ftfy library 可以像这样一步“修复”文本:

    >>> import ftfy
    >>> sample = '&#195;&#172;&#226;&#8364;&#185;&#194;&#160;&#195;&#172;&#203;&#339;&#194;&#129; &#195;&#172;&#226;&#8364;&#162;&#203;&#8224;'
    >>> ftfy.ftfy(sample)
    '신영 안'
    

    我使用该库告诉我使用了哪些编解码器,并使用它的 sloppy CP1252 decoder 生成上述解码器。

    例如对于我使用的您的输入:

    >>> ftfy.fixes.fix_encoding_and_explain(ftfy.fixes.unescape_html(sample))
    ('신영 안', [('encode', 'sloppy-windows-1252', 0), ('decode', 'utf-8', 0), ('encode', 'sloppy-windows-1252', 0), ('decode', 'utf-8', 0)])
    

    查看修复计划,并将其倒过来解释 Mojibake 最初是如何生产的。

    【讨论】:

    • 好吧,我是一名警察侦探,我通过传唤手机记录来识别订阅者,结果返回的名字是 신옠안
    • 那么您的数据在某处经历了重复的破坏。但是,没有数据丢失,这也很容易发生。在这种情况下它是完全可逆的。
    猜你喜欢
    • 2019-12-28
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多