& # Xc3; & # XA9; и другие коды - PullRequest
       43

& # Xc3; & # XA9; и другие коды

7 голосов
/ 14 ноября 2010

Я получил файл, полный этих кодов, и я хочу «перевести» его в обычные символы (я имею в виду целый файл). Как я могу это сделать?

Большое спасибо заранее.

1 Ответ

18 голосов
/ 14 ноября 2010

Похоже, у вас изначально был файл UTF-8, который интерпретировался как 8-битная кодировка (например, ISO-8859-15 ) и был закодирован объектами. Я говорю это потому, что последовательность C3A9 выглядит довольно правдоподобно UTF-8 кодирующая последовательность .

Сначала вам нужно будет декодировать объект, затем снова будет кодировка UTF-8. Затем вы можете использовать что-то вроде iconv для преобразования в кодировку по вашему выбору.

Чтобы проработать ваш пример:

  • & # xc3; & # XA9; будет декодирован как последовательность байтов 0xC3A9
  • 0xC3A9 = 11000011 10101001 в двоичном формате
  • ведущий 110 в первом октете говорит нам, что это можно интерпретировать как двухбайтовую последовательность UTF-8. Поскольку второй октет начинается с 10, мы смотрим на то, что мы можем интерпретировать как UTF-8. Для этого мы берем последние 5 бит первого октета и последние 6 бит второго октета ...
  • Итак, интерпретируется как UTF8, это 00011101001 = E9 = é ( МАЛЕНЬКОЕ ЛАТИНСКОЕ ПИСЬМО E С ОСТРОМ )

Вы упомянули о желании справиться с этим с помощью PHP, что-то вроде этого может сделать это для вас:

 //to load from a file, use
 //$file=file_get_contents("/path/to/filename.txt");
 //example below uses a literal string to demonstrate technique...

 $file="&Précédent is a French word";
 $utf8=html_entity_decode($file);
 $iso8859=utf8_decode($utf8);

 //$utf8 contains "Précédent is a French word" in UTF-8
 //$iso8859 contains "Précédent is a French word" in ISO-8859
...