6

リモート ファイルの内容を読み取り、それをローカル サーバーに書き込むスクリプトがあります。ファイルには文字が含まれています: ąčęėįšųūž。ローカル ファイルにデータを挿入すると、UTF-8 エンコーディングが失われます。私のスクリプトコード:

<?php 

$data = file_get_contents('remote_file_address');

echo $data; //encoding is ok

$file = dirname(__FILE__) . '/../downloads/data.csv';

file_put_contents($file,$data); //invalid encoding in data.csv file

?>

私もこの投稿に応じた指示に従いました(UTF-8形式でファイルを書き込む方法は?)が、それでもうまくいきません。

それで、それの何が問題なのですか?何か案は?

4

3 に答える 3

12

問題は、Windows-1257 エンコーディングのリモート ファイルでした。ここで解決策を見つけました。

したがって、正しいコードは次のようになります。

<?php 

$data = file_get_contents('remote_file_address');

$data = iconv("CP1257","UTF-8", $data);

$file = dirname(__FILE__) . '/../downloads/data.csv';

file_put_contents($file,$data);

?>
于 2012-06-20T10:03:34.040 に答える
8

PHP はエンコーディングを認識しません。PHP の文字列は、生のバイトを格納する単純なバイト配列です。どこかから文字列を読み取る場合、テキストは raw バイトで読み取られ、raw バイトに格納されます。ファイルに書き込む場合、PHP は raw バイトをファイルに書き込みます。PHP 自体がエンコーディングを変換することは決してありません。いつでも特別なことをする必要はありません。自分でエンコーディングをいじらないことだけが必要です。エンコーディングが最初から UTF-8 だった場合、手を加えなければ UTF-8 のままです。

他のプログラムで最終ファイルを開いたときにエンコーディングがおかしい場合は、他のプログラムがエンコーディングを誤解している可能性があります。ファイルは問題ありません。正しく表示されていないだけです。

于 2012-06-20T08:44:09.510 に答える
1

スクリプトとリモート ファイルが UTF-8 でエンコードされていることを確認し、data.csv の読み取りに使用しているソフトウェアが UTF-8 で読み取られることを確認してください。私は個人的に Notepad++ を使用してこれを確認します。すべてが UTF-8 である場合、 *utf8_(en|de)code 関数は必要ありません。リモート ファイルが UTF-8 でエンコードされていない場合は、それらを使用する必要があります。

于 2012-06-20T08:35:54.690 に答える