2012-05-06 14 views
0

だけでなく、私はいくつかのUnicodeのシンボルを持っているので、UTF-8で保存されている必要があり、私は私のテキストデータが満たされてい単純なテキストファイルを、持っている...java utf-8テキストファイルの読み込みバグ?

は、まあ私はメモ帳で、通常のテキストファイルを書きましたそして、UTF-8

とTXTとして保存されたしかし、私は前に奇妙なことのいくつかの種類を取得しているようだ: enter image description here

それも、通常はどこにも貼り付けることができない奇妙な点のいくつかの種類です。 これは、コードの一部です...私はそれが常に出てくるかはわからないほか、

を私は多分最初のシンボルを削除してみてください可能性がありますが、私はそれが本当の解決策だとは思わない:

FileInputStream fstream = new FileInputStream(fileName); 
     // Get the object of DataInputStream 
     DataInputStream in = new DataInputStream(fstream); 
     BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
     String values; 

     //Read File Line By Line 

     System.out.println("Generating queries from: " + fileName); 
     String fields = br.readLine(); 
     System.out.println("The fields are: " + fields); 

誰もがこれを知り、解決策を知っていますか?

ありがとうございます。

+0

申し訳ありませんが、私はそれを赤色にしておいてください。ここには次のフィールドがあります:XLanguage_code ...ここからXです –

+0

それは単なるスクリーンアーチファクトではありませんか?コードに影響しないが、そこに残っているものは何か? – Brendan

+1

'fields.codePointAt(0)'の値は何ですか? –

答えて

3

おそらくUnicode Byte Order Mark (BOM)です。一部のテキストエディタ(Windowsの場合)は、BOM付きのUTF-8テキストファイルを開始し、Unicodeであることを示します。

Javaでこれを処理する必要がある場合は、ファイルから読み取る最初のUnicodeコードポイントが0xffefであるかどうかを確認し、それが削除されているかどうかをテストします。

+1

私は同意します。 Utf-8はバイトオーダーに依存しませんが、Microsoftはファイルがutf-8であることを示す指標として何らかの方法を追加しています。 https://en.wikipedia.org/wiki/Byte_order_mark#UTF-8 – Bill

+1

これは**間違いなく** BOMです:http://stackoverflow.com/questions/10467241/java-utf-8-text-file-reading -bug#comment13520566_10467241( '0d65279 = 0xFEFF') –