javaコンパイル時のエラー:不正な文字 '\ufeff' に対する解決策です。
元記事へのリンク: https://blog.csdn.net/shixing_11/article/details/6976900
最近、開発者がxxx.javaファイルをSVN経由で提出し、リリースに問題があるためパッケージをロールバックする必要があり、SCMはxxx.javaファイルをeditplusで開き、新しく追加した行を削除し、パッケージを再コンパイルすると、次の例外が報告されました。
java:[1,0] illegal character: \65279
SVNからコードを更新した後、ローカルでエラーが報告されていないことを確認し、Eclipseを通してxxx.javaクラスのプロパティを見ると、以下のようになっていました。
問題のあるファイルのプロパティをコンパイルする:( 最下行のバイトオーダーマークがUTF-8(BOM)であることに注意 )
通常のファイル属性をコンパイルします。
Byte Order Mark is UTF-8 (BOM)に問題があるようです。問題が確認できなかったので、UltraEditで両方のファイルを開き、16進数で表示すると以下のようになりました。
問題のあるファイルのヘッダーです。
無題のドキュメントヘッダーです。
問題のファイルヘッダの前に3バイトのEF BB BFが追加されているように見えます。
具体的な原因は以下の通りです。
エディタによっては、utf8ファイルにutf8タグ(editplusではシグネチャと呼ぶ)を追加し、ファイルの先頭に3つの見えない文字(0xEF 0xBB 0xBF、BOM)を挿入し、ユニコードマークアップ(BOM)を表すものがあります。 そこで、この問題を解決する鍵は、このマーカーオプションを削除することであり、以下のように行うことができます。
まずeditplusでファイルを開き、DoucumentメニューからPermanet Settingsを選択します。一般、ファイル、ツールの3つのカテゴリがあります。OKをクリックします。中国語版Editplusは、以下のようなメニュー構成で動作します。Document->Parameter Settings->File->UTF-8 signature->Always remove signature->OK , で、ファイルの前にマーカーを付けなくてもUTF-8形式が設定され、最後にutf-8形式で保存されるようになっています。
<スパン 関連情報(抜粋)オンラインはこちら
UTF-8はバイトを符号化単位とするため、バイトオーダーの問題はない。UTF-16は2バイトを符号化単位としているので、UTF-16のテキストを解釈する前に、まず各符号化単位のバイトオーダーを把握する必要があります。例えば、Unicodeのエンコーディングが"奎"の594Eと"乙"の4E59の場合、UTF-16のバイトストリームを受信すると"594E "というバイトオーダーをマークする推奨方法はBOMですが、BOMはちょっと賢いのです。UCSのエンコーディングに"ZERO WIDTH NO-BREAK SPACE"という文字がありますが、これはFEFFとエンコードされており、FFFEはUCSには存在しない文字なんだそうです。UCSの仕様では、バイトストリームを送信する前に、文字 "ZERO WIDTH NO-BREAK SPACE" を送信することが推奨されています。こうすることで、受信者がFEFFを受信すれば、バイトストリームがビッグエンディアンであることを示し、FFFEを受信すれば、バイトストリームがリトルエンディアンであることを示す。したがって、ZERO WIDTH NO-BREAK SPACE"という文字もBOMと呼ばれます。UTF-8では、バイト順を示すのにBOMは必要ありませんが、符号化方式を示すのにBOMを使用することができます。UTF-8の文字 "ZERO WIDTH NO-BREAK SPACE" のエンコーディングはEF BB BFです(読者は先に紹介したエンコーディング方法で確認することができます)。つまり、受信者がEF BB BFで始まるバイト列を受信すれば、それがUTF-8エンコーディングであることがわかるわけです。BOMは、ファイルの先頭にマーカーとして数バイトを追加することが判明しています。
<スパン 読み聞かせの延長。
UTF-8, UTF-16, UTF-32 & BOM。
http://www.unicode.org/faq/utf_bom.html#BOM
W3Cの公式ノートです。
http://www.w3.org/International/questions/qa-utf8-bom
関連
-
myeclipseでコンパイルするとAntエラーが発生する javaの例外が発生しました。
-
Android Studio 3.1.2 で v4, v7 パッケージが見つからない シンボル 'AppCompatActivity' を解決できない
-
eclipseにプロジェクトをインポートした後、Editorにmain typeが含まれない問題
-
VMの初期化中にエラーが発生しました java/lang/NoClassDefFoundError: java/lang/Object
-
Methodのinvokeメソッド実装のJavaリフレクション
-
spring-boot 401 このリソースにアクセスするには完全な認証が必要です エラー解決
-
ローカルリソースのロードが許可されていない場合の解決策
-
dao インターフェースがメソッドを定義し、エラーを報告した。 xxx 型のメソッド xxx は未定義である。
-
スレッド "main "での例外 java.lang.NullPointerException どのようにそれを解決するには?
-
Tomcat 8は、「少なくとも1つのJARがTLDをスキャンされたが、TLDが含まれていない」問題を解決します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
エラー java.util.NoSuchElementException
-
ファインバグタイプ
-
eclipse で「アクセス制限: タイプ 'HttpServer' は API ではありません」というプロンプトが表示される。
-
Javaクラスローダーにソースコードから潜り込む
-
スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 4 at text.Division.main(Divisi
-
spring aop アドバイスからの Null 戻り値が、サマリーのプリミティブ戻り値と一致しない。
-
mavenプロジェクトのテストエラー java.lang.ClassNotFoundException: org.glassfish.jersey.client.ClientConfig の問題を解決する。
-
Java言語プログラミング(基礎編)(第10版)練習問題解答編 第7章
-
Java面接のポイント3--例外処理(Exception Handling)
-
eclipse start tomcat エラー。Java Exceptionが発生しました