0

OS X で Java プラットフォームを使用して Unicode テキスト ファイルを処理しています。TextEdit または TextWrangler を使用してファイルを開くと、"Nattvardsgästerna" ではなく "Nattvardsg‰sterna" が表示されます (これは正しくありません)。Java io ストリームを使用してファイルを開くと、同じ間違ったString「Nattvardsg‰sterna」が表示されます。

PC でファイルを開くと、正しい文字列が表示されます。この問題の解決をどこから始めればよいかわかりません... OS X の設定の問題ですか? 特別なフラグで Java ストリームを開く必要がありますか?

ありがとう。

PS私は次のようにファイルを開いています:fileReader = new BufferedReader(new FileReader(file));

PSS また、結果を SQL テキスト ファイルとして出力したいので、OS がäを正しく区別することが重要です。

4

1 に答える 1

3

はバイト(文字ではない)InputStreamを読み取るので、あなたが言うとき私は仮定します:

javaiostreamを使用してファイルを開くと

...つまり、Javaを使用してファイルを開いたとき」Readerという意味です。

編集:あなたのコメントはあなたがこれをしていると言っています:

new BufferedReader(new FileReader(file));

AnInputStreamReaderには、文字エンコードを設定できるコンストラクタがあります。指定しない場合は、プラットフォームのデフォルトが使用されます。プラットフォームのデフォルトがユニコードになる可能性は低いです(私のMacbookでは「US-ASCII」に設定されています)。

文字エンコードを設定するには、(プラットフォームのデフォルトのエンコードを使用するFileReaderため)それを行うのではなく、中間入力ストリームリーダーを作成する必要があります。FileReader

ファイルがUTF-8を使用してエンコードしていると仮定すると、次を使用します。

new BufferedReader(new InputStreamReader(new FileInputStream(file), 
                                         Charset.forName("UTF-8")));

または、JVMに引数を指定して、プラットフォームのデフォルトを変更することもできます。詳細については、この回答を参照してください。ただし、基本的な考え方は、file.encodingJavaシステムプロパティを設定することです。リンクされた回答は、これを達成するためのいくつかの方法を提供します。

さらなる編集:

PSSまた、結果をSQLテキストファイルとして出力したいので、OSがäを正しく区別することが重要です。

OSはこれとは何の関係もありません。ファイルシステムはバイトをシャッフルしているだけです。これらのバイトがどのように解釈されるかは、完全にそれらのファイルを読み取っているアプリケーション次第です。この回答は、Javaプログラムにバイトを正しく解釈させる方法を示しています。データベースがバイトを正しく解釈できるようにするには、データベースのエンコーディングを構成する必要があります。

于 2013-01-18T22:40:37.050 に答える