HTML сущности содержат чушь - PullRequest
0 голосов
/ 31 марта 2020
신영 안

Выше html, ниже код. Это имя? Что это значит?

신옠안

1 Ответ

4 голосов
/ 31 марта 2020

У вас есть double Mojibake , данные искажены с помощью неправильных кодеков.

На самом деле Korean , имя:

신영 안

или, при использовании HTML сущностей, этот должен быть закодирован в

신영 안

. Он переводит на английский sh как Шин-Янг .

Когда кодируется в UTF-8 и группируется по входной кодовой точке, а затем отображается с использованием шестнадцатеричных цифр, вы получите это:

ec 8b a0
ec 98 81
20
ec 95 88

Чтобы получить результат, который у вас есть, кто-то должен иметь:

  • Декодировать вышеуказанные данные UTF-8 с использованием Windows кодовая страница 1252 , получая

    ì‹<A0>ì˜<81> 안
    

    (где <A0> - символ неразрывного пробела, а <81> - недопустимый байт CP1252, но это часто игнорируется во многих декодерах; я включил их в эту запись, поскольку в противном случае они не были бы для печати)

  • Снова закодировал получающийся беспорядок в UTF-8, чтобы получить следующие байтовые значения:

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

    (группировка m устанавливает правильный код UTF-8 (см. выше)

  • Второй раз декодировал эти байты UTF-8, используя тот же код Windows CP1252 c, на этот раз получая:

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

    (с одинаковыми примечаниями к символам <A0> и <81>)

  • Окончательно закодировал получившиеся символы в HTML сущности:

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

Если у вас установлено Python, то библиотека ftfy может «восстановить» текст, подобный этому, за один шаг:

>>> 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)
'신영 안'

Я использовал эту библиотеку, чтобы сообщить мне, какие кодеки были использованы, а также использовать ее небрежный декодер CP1252 для создания описанных выше декодеров.

Например, для вашего ввода я использовал:

>>> 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)])

чтобы увидеть план ремонта, и перевернул его, чтобы объяснить, как в первую очередь был произведен моджибаке.

...