私はこれが何度か議論されてきたことを知っていますが、それでも私はこの問題に夢中になっています. submit.php アクションを含むフォームがあります。最初は、文字セットについては何も変更せず、utf8 ヘッダー情報も使用しませんでした。その結果、データベース内のすべての ä、ö、ü などを正しく読み取ることができました。それらをExcelにエクスポートし.csv
てExcelにインポートするとUTF-8 charset
(他のすべてもテストされました)、文字セットが正しくなくなります。
今私が試したこと:
PHP:
header("Content-Type: text/html; charset=utf-8");
$mysqli->set_charset("utf8");
MySQL: データベースを削除して、新しいデータベースを作成しました:
create database db CHARACTER SET utf8 COLLATE utf8_general_ci;
create table ...
my.cnf を変更し、SQL サーバーを再起動しました。
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[mysql]
default-character-set=utf8
bash 経由でデータベースに接続すると、次の出力が表示されます。
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/charsets/ |
PHP テスト:
var_dump($mysqli->get_charset());
私に与える:
Current character set: utf8 object(stdClass)#3 (8) { ["charset"]=> string(4) "utf8" ["collation"]=> string(15) "utf8_general_ci" ["dir"]=> string(0) "" ["min_length"]=> int(1) ["max_length"]=> int(3) ["number"]=> int(33) ["state"]=> int(1) ["comment"]=> string(13) "UTF-8 Unicode" }
今私は使用します:
mysql -uroot -ppw db < require.sql > /tmp/test.csv
require.sql は単に
select * from table;
また、UTF-8などを選択しても、csvとしてExcelにインポートできません。それはいつも私にいくつかの暗号を与えています..
うまくいけば、誰かがここで何がうまくいかなかったのかヒントを得ました..
乾杯
E: TextMate は私に正しい出力を与えているので、変換が実際に機能しているように見えますが、それは Excel の問題ですか? マイクロソフト オフィス 2011 を使用しています。
E2: latin1 でも同じことを試しました - 同じ問題で、特殊文字を壊さずに Excel にインポートできません。ヒントや回避策はありますか?
E3: Excel のインポート機能では機能するが、.csv のダブルクリックでは機能しない回避策を見つけました。
iconv -f utf8 -t ISO-8859-1 test.csv > test_ISO.csv
これで、Windows (ANSI) を使用して csv を Excel にインポートできるようになりました。ダブルクリックの代わりにこの機能を使わなければならないのはまだ面倒です。また、インポート機能、BOM の追加、UTF8 の完全なデータベースを使用しても、UTF8 が機能しない理由がわかりません。
カンマ区切りもめちゃくちゃであることが判明しました。1. Concat_WS は、愚かな concat_ws(..) ヘッダーを .csv ファイルに追加しているため、部分的にしか機能しません。また、「file test.csv」では「カンマ区切り」が表示されません。これは、すべてがコンマで区切られていても、Excel はダブルクリックしても認識しないことを意味します。2. sed/awk: いくつかのコード スニペットが見つかりましたが、それらのすべてがテーブルをひどく分離していました。たとえば、列通りの「通り名番号」は、1 つの列から 2 つの列を作成する「通り名」、「番号」のままで、テーブルが台無しになりました。
したがって、Excelはダブルクリックでのみ.csvを開くことができるようです。a)ISO-8859-1でエンコードされています(標準のmac文字セットはMacintoshであるため、Windowsの下でのみ)b)属性「カンマ区切り」を持つファイル。これは、Excel 自体を使用して .csv を作成すると、次の出力が得られることを意味します。
file test1.csv
だろう
test1.csv: ISO-8859 text, with CRLF line terminators
コンマを追加するために使用されるRegExでiconv変更された文字セットは次のようになります。
test1.csv: ISO-8859 text
かなり奇妙な動作 - 誰かが実用的な解決策を得たのかもしれません。