Похоже, у вас изначально был файл 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