2012-03-26 12 views
2

Javaのバグデータベースhttp://bugs.sun.com/view_bug.do?bug_id=4508058のページで、Sun/OracleはJavaの問題をUTF-8でエンコードされた文字列のBOMを解析しないように修正しないと読んでいます。このページの最新のコメントは2010年にさかのぼるので、私はそこに若い情報があるかどうか知りたいのですが? JavaがUTF-8のBOMを処理できないことは、まだ真実ですか?Java:UTF-8およびBOM

+1

問題の表記方法には同意しますが、はい:UTF-8用のJavaエンコーダとデコーダは、余分なBOMを許容しません。 UTF-8のBOMは本当に悪いニュースであり、あらゆる種類の事柄を破ります。絶対に使用しないでください。ファイルのエンコードを指定する必要がある場合は、MIMEヘッダー、埋め込み宣言やコメントなどの上位プロトコルを使用するか、慣習的なファイル拡張子 ".utf8"を使用します。 – tchrist

+2

私はあなたに同意します。ただし、ユーザーがExcelで直接開くことができるUTF-8 csvファイルを作成する場合は、BOMを回避する手段はありません。 BOMを使用しない場合は、BOMをANSIファイルとして読み込みます。 (マイクロソフトは、BOMが世界の費用を負担しているすべての開発時間に訴訟を起こすべきです) – dstibbe

答えて

3

はい、JavaがBOMをUTF8でエンコードされたファイルで処理することはできません。私はこの問題を、データフォーマットの目的でいくつかのXMLファイルを解析するときに見つけました。いつあなたがそれらに出会うかも知れないので、実行時にそれを見つけたり、tchristが与えたアドバイスに従ってBOMマーカーを取り除くことをお勧めします。

+0

これを行う方法について紛失している場合は、すばやく 'if(text.codePointAt(0)== 0xfeff)text = text.substring(1、text.length()); '(これはUTF-8 BOMの' EF BB BF'も捕捉します)。より精巧なアプローチについては、http://stackoverflow.com/questions/1835430/byte-order-mark-screws-up-file-reading-in-java/1835529#1835529 – user149408