2009-06-12 20 views
0

私はWindowsマシンでJava/EEプログラムを開発しましたが、Windowsでは完全に機能しましたが、LinuxマシンでWARをJbossにインストールすると、CSVファイル。 CsvファイルはISO-8859-1としてエンコードされ、ファイルIはISO-8859-1としてエンコードされます。 MySQLは、文字列がUTF-8としてエンコードされていないように見えます。エンコードはデータベースで使用されています。LinuxとMySQLのエンコーディングの問題

+0

Javaサーバーを使用してデータをインポートしたり、コマンドラインmysqlクライアントを使用してインポート時に問題が発生しているかどうかは、実際には明らかではありません。 –

答えて

0

私たちは、1に行くが、10のためのスターターとして、私はUnicodeと文字セットにジョエルの記事を読んでお勧めしたいのために多くの情報がないと怖い:

The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

は、少なくともそれを読みます2度:)

あなたの特定の問題については、csvファイルを開く読者が(UTF8の可能性が高い)プラットフォームエンコーディングを想定している可能性があります。これは、ISO-8859-1文書が間違ってJava String Encodingに変換された場合、ここからすべてが間違っています。

任意のJavaアプリケーションで文字エンコーディングを使用する上での重要なポイントは、任意の文字列がUTF-16Eだと思う「Java String encoding」にあることを理解することですが、頭の上を覚えていないのでJavaのUTF-8やISO-8859-1の文字列はありません。これは、文字列が一連のバイトから読み込まれ、書き出されるシステムの境界を見る必要があることを意味します。 mysql jdbcドライバを使用しているので、ターゲットのdbに対してcharエンコーディングが正しく処理されないとは思いませんが、それ以外の場合はドライバのドキュメントをチェックアウトする価値があります。

1

の場合を使用mysqlコマンドラインクライアントで使用されるエンコーディングを変更したい場合問題はあなたがファイルを読むときに起こります(データをDBに挿入するときとは対照的に)私はそれがオフのfile.encodingシステムプロパティだと思います。エンコーディングを指定せずにリーダーを作成する場合は、デフォルトでfile.encodingが使用されます。したがって、もしあなたのLinuxボックスがシステムエンコーディングとしてUTF-8を持っていれば、非ASCII-7文字は問題を引き起こします。

あなたは、いくつかの適切な値(私はあなたがen_US.ISO-8859-1のようなものを使用することができると思うが、マニュアルを確認してください)にLC_ALL環境変数を設定することにより、グローバルシステムのデフォルトエンコーディングを変更することができ、またはあなただけでJVMインスタンスに対してローカルで変更することができますただ正しいCharSet/CharSetDecoderでコンストラクタを提供して - あなたはCSVを読み取るコードを変更することができる場合、私はあなたがInputStreamReaderから(直接または間接的に)読んで引き受ける

java -Dfile.encoding=ISO-8859-1 -jar yourapp.jar 

:コマンドラインで指定あなたは終わった。 (また、このようなものは設定したいかもしれない - しかし、私はあなたが自分でそれをうまくできると仮定します。)

0

あなたのCSVファイルのエンコーディングこれがお手伝いします

希望を変更するGNU iconvを使用することができます。

関連する問題