7

これらのコードでいっぱいのファイルを取得したので、それを通常の文字 (つまり、ファイル全体) に「変換」したいと考えています。どうすればいいですか?

事前にどうもありがとうございました。

4

1 に答える 1

19

元々、8 ビット エンコーディング (例: ISO-8859-15 ) として解釈され、エンティティ エンコードされた UTF-8 ファイルがあったようです。私がこれを言うのは、シーケンス C3A9 が非常にもっともらしいUTF-8 エンコーディング シーケンスのように見えるからです。

最初にエンティティ デコードする必要があります。次に、UTF-8 エンコーディングを再度取得します。次に、iconvなどを使用して、選択したエンコーディングに変換できます。

例を実行するには:

  • Ã © バイト シーケンス 0xC3A9 としてデコードされます。
  • 0xC3A9 = 11000011 バイナリで 10101001
  • 最初のオクテットの先頭の 110 は、これが UTF-8 の 2 バイト シーケンスとして解釈できることを示しています。2 番目のオクテットは 10 で始まるため、UTF-8 として解釈できるものを調べています。そのために、最初のオクテットの最後の 5 ビットと、2 番目のオクテットの最後の 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
于 2010-11-14T14:02:54.830 に答える