web-dev-qa-db-ja.com

Javaコードをコンパイルしようとすると不正な文字

ユーザーがJavaコードをリッチテキストボックスに入力してから、Javaコンパイラーを使用してコンパイルします。私が書いたコードには、コードの先頭に不正な文字があり、そこにないというエラーが表示されます。

C:\Users\Travis Michael>"\Program Files\Java\jdk1.6.0_17\bin\javac" Test.Java
Test.Java:1: illegal character: \187
public class Test
 ^
Test.Java:1: illegal character: \191
public class Test
  ^
2 errors
22
muckdog12

エンコーディングを指定しない場合、BOMは、たとえばFile.WriteAllText()またはStreamWriterによって生成されます。デフォルトでは、UTF8エンコードを使用してBOMを生成します。 -encodingコマンドラインオプションを使用して、これについてJavaコンパイラーに伝えることができます。

抵抗が最も少ないのは、BOMの生成を回避することです。これを行うには、System.Text.Encoding.Defaultを指定します。これにより、オペレーティングシステムの既定のコードページの文字でファイルが書き込まれ、BOMは書き込まれません。 File.WriteAllText(String、String、Encoding)オーバーロードまたはStreamWriter(String、Boolean、Encoding)コンストラクターを使用します。

作成するファイルが、世界の別の場所にあるマシンによってコンパイルされないようにしてください。 mojibake が生成されます。

17
Hans Passant

みんなが言うように、それはバイトオーダーマークです。

javacはBOMを理解しません。あなたが何かを試しても

javac -encoding UTF8 Test.Java

BOMを削除するか、ソースファイルを別のエンコードに変換する必要があります。 Notepad ++は単一のファイルエンコーディングを変換できますが、このためのWindowsプラットフォーム上のバッチユーティリティは知りません。

Javaコンパイラは、ファイルがプラットフォームのデフォルトエンコーディングにあると想定するため、これを使用する場合、エンコーディングを指定する必要はありません。

14
zneo
  1. IDEを使用している場合は、Javaファイルエンコーディングを(プロパティパネルから)指定します)
  2. IDEを使用していない場合は、高度なテキストエディター( Notepad ++ を推奨できます)を使用し、エンコードを「BOMなしのUTF」または「ANSI」に設定します(適切な場合)。
4
Bozho

http://en.wikipedia.org/wiki/Byte_order_mark

バイトオーダーマーク(BOM)は、テキストファイルまたはストリームのエンディアン(バイトオーダー)を示すために使用されるUnicode文字です。コードポイントはU + FEFFです。 BOMの使用はオプションであり、使用する場合は、テキストストリームの先頭に表示する必要があります。バイトオーダーインジケータとしての特定の用途以外に、BOM文字は、テキストがエンコードされているいくつかのUnicode表現のどれを示しているかもしれません。

BOMは、Unicodeストリームの開始時に時々見られるファンキーな外観の文字であり、エンコーディングが何であるかを知る手掛かりとなります。通常、Javaの文字列処理によって目に見えないように処理されるため、何らかの方法で混乱している必要がありますが、コードを見ずに、どこを見ることは困難です。

javacに渡す前に文字列からBOMを手動で削除することで、簡単に修正できる場合があります。おそらく空白として修飾されるので、入力文字列でtrim()を呼び出し、その出力をjavacに渡してみてください。

3
skaffman

In Android Studio

1. Menu -> Edit -> Select All
2. Menu -> Edit -> Copy
  1. 新しいNotepad.exeを開きます

メモ帳で

4. Menu -> Edit -> Paste
5. Menu -> Edit -> Select All
6. Menu -> Edit -> Copy 

バックインAndroid Studio

7. Menu -> Edit -> Paste
2
Ingo

これは、BOM(バイトオーダーマーク)文字に関連する問題です。バイトオーダーマークBOMは、テキストファイルのバイトオーダーを定義するために使用されるUnicode文字であり、ファイルの先頭にあります。 Eclipseでは、ファイルの先頭でこの文字を使用できないため、削除する必要があります。この目的のために、Notepad ++のようなリッチテキストエディターを使用し、「BOMなしのUTF-8」エンコーディングでファイルを保存します。これで問題が解決するはずです。

I have copy pasted the some content from a website to a Notepad++ editor,
it shows the "LS" with black background. Have deleted the "LS" content and 
have copy the same content from notepad++ to Java file, it works fine.
2
anand krish

これを解決するには、textEditプログラムファイルを右クリックして[置換]を選択し、スマートクォートをオフにします。

2
Bobby Iveson

notepad ++を取得する代わりに、ワードパッドでファイルを開き、[名前を付けて保存-プレーンテキストドキュメント

1
HelpNeeded

Notepad ++を使用してコーディングしているため、この問題にさえ直面していました。 notepad ++でコードを入力すると非常に便利です。しかし、コンパイル後に「エラー:不正な文字: '\ u00bb'」というエラーが表示されます。解決策:古いバージョンのメモ帳(PCにはデフォルトで存在します)でコードの記述を開始し、保存します。後で、notepad ++を使用して変更を行うことができます。できます!!!

0
Akhil Arkyath