Excel 2010 Professional Plus を使用して Excel ファイルを作成しています。後で、UTF-8 .csv ファイルとしてエクスポートしようとしています。私はそれをCSVとして保存することでこれを行います(記号で区切られています.....正確な言葉遣いはわかりませんが、英語版がなく、 1:1 とは異なる方法で翻訳されているのではないかと心配しています)。そこで、tools->weboptions をクリックし、エンコードとして Unicode (UTF-8) を選択します。.csv の例は次のとおりです。
ID;englishName;germanName
1;Austria;Österreich
ここまでは順調ですが、php コードでファイルを開くと、次のようになります。
header('Content-Type: text/html; charset=UTF-8');
iconv_set_encoding("internal_encoding", "UTF-8");
iconv_set_encoding("output_encoding", "UTF-8");
setlocale(LC_ALL, 'de_DE.utf8');
$fp=fopen($filePathName,'r');
while (($dataRow= fgetcsv($fp,0,";",'"') )!==FALSE)
{
print_r($dataRow);
}
- 結果として、画面に「sterreich」が表示されます (これは「エラー」であるため、結果の他のすべての部分を切り取りました)。
- notepad++ でファイルを開いてエンコーディングを見ると、UTF-8 ではなく "ANSI" が表示されます。
- notepad++ のエンコーディングを UTF8 に変更すると....ö、ä、... が特殊な文字に置き換えられるため、手動で修正する必要があります。
別のルートに進み、notepad++ で新しい UTF-8 ファイルを作成し、Excel ファイルと同じデータを入力すると、php ファイルで開くと画面に「Österreich」と表示されます。
今私が持っている質問は、なぜExcelで機能しないので、ここで何か間違ったことをしているのですか? それとも私は何かを見落としていますか?
編集: プログラムは最終的に顧客が提供するWindowsサーバーにインストールされるため、追加のツールをインストールする必要がないソリューションが必要です(phpライブラリなどは問題ありませんが、vm-wareまたはcygwin ではありません)。また、顧客はファイル アップロード ダイアログを介して .csv ファイルをアップロードできるため、サーバーにローカルにインストールされた Excel (または Office) はありません (ダイアログ自体は問題の一部ではありません。それらを処理し、さらに、Excel ファイルを作成し、Excel がローカルにインストールされているテストマシンで .csv に変換したときにつまずいた問題自体を処理します)。
TNX