ですから、本当に気になる問題があります。 Javaで作成した単純なパーサーがあります。関連するコードは次のとおりです。
while( (line = br.readLine())!=null)
{
String splitted[] = line.split(SPLITTER);
int docNum = Integer.parseInt(splitted[0].trim());
//do something
}
入力ファイルはCSVファイルで、ファイルの最初のエントリは整数です。解析を開始すると、すぐに次の例外が発生します。
Exception in thread "main" Java.lang.NumberFormatException: For input string: "1"
at Java.lang.NumberFormatException.forInputString(NumberFormatException.Java:65)
at Java.lang.Integer.parseInt(Integer.Java:580)
at Java.lang.Integer.parseInt(Integer.Java:615)
at dipl.parser.TableParser.parse(TableParser.Java:50)
at dipl.parser.DocumentParser.main(DocumentParser.Java:87)
ファイルを確認しました。実際、最初の値は1です(そのフィールドに他の文字はありません)が、それでもメッセージが表示されます。これはファイルエンコーディングが原因である可能性があると思います。Unixエンドラインを備えたUTF-8です。そして、プログラムはUbuntu14.04で実行されます。問題を探す場所についての提案は大歓迎です。
その番号の前に [〜#〜] bom [〜#〜] があります。質問で"1"
のように見えるものをコピーして、vim
に貼り付けると、FE FF(たとえば、 [〜#〜] bom [〜# 〜] )その前に。そのリンクから:
BOMを構成する正確なバイトは、その変換形式によってU + FEFFが変換されるUnicode文字になります。
それが問題なので、ファイルがエンコードされている変換(UTF-8、UTF-16ビッグエンディアン、UTF-16リトルエンディアンなど)に適したリーダーでファイルを使用します。 JavaでUnicodeファイルを読み取る方法の詳細については、 この質問とその回答 も参照してください。