Ã和其他代码

时间:2010-11-14 13:55:49

标签: utf-8 utf8-decode

我有一个充满了这些代码的文件,我想把它“翻译”成普通的字符(我的意思是整个文件)。我该怎么办?

非常感谢你。

1 个答案:

答案 0 :(得分:18)

看起来你最初有一个UTF-8文件,它被解释为8位编码(例如ISO-8859-15)和实体编码。我这样说是因为序列C3A9看起来很合理UTF-8 encoding sequence

您需要首先对其进行实体解码,然后再次使用UTF-8编码。然后,您可以使用iconv之类的内容转换为您选择的编码。

完成您的示例:

  • &安培;#XC3; &安培;#xA9;将被解码为字节序列0xC3A9
  • 0xC3A9 = 11000011 10101001二进制
  • 第一个八位字节中的前导110告诉我们这可以解释为UTF-8双字节序列。当第二个八位字节从10开始时,我们正在寻找可以解释为UTF-8的东西。为此,我们取第一个八位位组的最后5位,以及第二个八位位组的最后6位......
  • 因此,解释为UTF8,它是00011101001 = E9 =é(LATIN SMALL LETTER E WITH ACUTE

你提到想用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