こんにちは、私の投稿を読んでくれてありがとう。
私の問題は次のとおりです。Java "javac"のソースファイルをコンパイルします。このファイルはBOMでUTF-8エンコードされています(OSはWinXP)。
以下は私がすることです:
1)「メモ帳」でファイルを作成し、UTF-8エンコーディングを選択します
dos> notepad Test.Java
"File -> Save as..."
File name : Test.Java
Save as type: All Files
Encoding : UTF-8
Save
2)Javaクラスを作成し、1のようにファイルを保存します)
public class Test
{
public static void main(String [] args)
{
System.out.println("This is a test.");
}
}
3)ファイルの16進数バージョンを視覚化する(最初の行)
dos> xxd Test.Java | head -1
0000000: efbb bf70 7562 6c69 6320 636c 6173 7320 ...public class
注:ef bb bfは、UTF-8でエンコードされたBOMです(UTF-16でエンコードされたBOMはFE FFです)。
4)このコードを「javac」でコンパイルしてみてください
dos> javac -encoding utf8 Test.Java
Test.Java:1: illegal character: \65279
?public class Test
^
1 error
注:65279は、BOMの10進数バージョンです。
私の質問は次のとおりです:このコンパイルをどのように機能させることができますか:
よろしくお願いします。
レア
BOMをトリムしてから、javac -encoding utf8 x.Java
これはテキストエディタの問題ではなく、javacの問題です。 Unicode仕様では、BOMはUTF-8ではオプションであると記載されていますが、禁止されているわけではありません! BOMが存在できる場合、javacはそれを処理する必要がありますが、そうではありません。実際、UTF-8ファイルでBOMを使用するIS ANSIコード化ファイルとUnicodeコード化ファイルを区別するのに役立ちます。
BOMを削除するという提案された解決策は回避策にすぎず、適切な解決策ではありません。
このバグレポートは、この「問題」が修正されることは決してないことを示しています。 http://bugs.Java.com/view_bug.do?bug_id=4508058
このスレッドは「javac BOM」検索の上位2件のGoogle検索結果に含まれているため、今後の読者のためにここに残しておきます。
https://stackoverflow.com/a/28043356/7050261
実際、UTF-8ファイルでBOMを使用するIS ANSIコード化ファイルとUnicodeコード化ファイルを区別するのに役立ちます。
実は
BOMはANSIとUnicodeを区別するものではありません。設計されていない機能を故意に使用しないでください。
UTF-8は意図的にANSIと下位互換性を持つように設計されているため、0..127バイトのみに依存するフォーマットされたテキスト(XML、JSONなど)を処理するために記述された多くのコードは、UTF-8でエンコードされたテキストなしで正しく機能します。変更。