2016-12-20 3 views
0

Mavenプロジェクトの.javaファイルのソースエンコーディングは、Subversionで主にASCIIに格納され、いくつかのファイルはUTF-8です。Maven Javaプロジェクトでのファイルのソースコード

私はこれらのファイルがUTF-8であると考えていたと思います。 pomファイルでは、ソースエンコーディングはUTF-8として指定されています。

今回のビルドでは特に、SonarQubeの解析がISO-8859の.javaファイルで失敗し、変数に特殊文字が含まれていると失敗します。特殊文字を使うのは良い考えではありませんが、Javaファイルには一貫性のある(UTF-8)エンコーディングを使用しないでください。

大部分がASCIIで、一部のみがUTF-8であることは関係ありませんか?それは重要な考えですか?

私はこれらのファイルがどのようにASCIIエンコーディングで終わるか理解していません。 SublimeTextファイルなどのIDEまたはエディタを使用すると、UTF-8として終了します。

ASCII MS Windowsでノートパッドを使用する場合にのみ表示されます。 Java開発者は通常、プログラミングのためにそれを使用しません。

ソースファイルをUTF-8を使用するように変更する必要がありますか?それともそれは問題にならないかもしれませんし、そのまま残すことができますか?

例として、 MS Windowsを使用するSublimeTextとNotepad.exeを使用して1つのファイルを使用して1つのファイルを作成します。私はそれらのファイルにテキスト1234Ïを入れます。テキストには、2つの点を持つ特殊文字Iが含まれています。

私はfile

[email protected]:/tmp/iconv$ file sublimtext.txt 
sublimtext.txt: UTF-8 Unicode (with BOM) text, with no line terminators 
[email protected]:/tmp/iconv$ file notepad.txt 
notepad.txt: ISO-8859 text, with no line terminators 
[email protected]:/tmp/iconv$ 

を使用してLinux上でこれらのファイルを見るときに、これは、メモ帳に関係なく、内容のISO-8859としてファイルを保存した示しています。私はiconv

[email protected]:/tmp/iconv$ iconv -f UTF-8 notepad.txt -o /dev/null 
iconv: incomplete character or shift sequence at end of buffer 
[email protected]:/tmp/iconv$ iconv -f UTF-8 sublimtext.txt -o /dev/null 
[email protected]:/tmp/iconv$ 

を使用してファイルをチェックすると、私はSublimeTextを使用してファイルnotepad.txtを開き、保存することができ、エンコーディングはまだISO-8859として表示されます。

文字は両方のファイルで正しく表示されます。これは、エディタがファイルの内容からエンコーディングを決定しようとするという考え方をサポートしています。しかし、他のどこかのファイルはISO-8859としてマークされ、認識されています。

は、私がメッセージ不完全な文字がなくなっているので、変換が成功したiconv

[email protected]:/tmp/iconv$ iconv -f ISO-8859-15 -t UTF-8 notepad.txt > notepad-utf8.txt 
[email protected]:/tmp/iconv$ file notepad-utf8.txt 
notepad-utf8.txt: UTF-8 Unicode text, with no line terminators 
[email protected]:/tmp/iconv$ 
[email protected]:/tmp/iconv$ iconv -f UTF-8 notepad-utf8.txt -o /dev/null 

を使用してエンコーディングを変更することができます。

+0

[UTF-8](https://en.wikipedia.org/wiki/UTF-8)はASCIIと互換性があります。 ASCII文字を含むファイルも有効なUTF-8ファイルです。 (これが、UTF-8がほぼすべてのものに最適な理由の1つです)。また、文字エンコーディングはファイル自体のプロパティではありません。ファイルの内容から検出されます。 – Jesper

+0

いくつかの通常の文字でSublimeTextを使ってファイルを作成すると、UTF-8として表示されます。メモ帳でMS Windows上で同じ文字で作成されたファイルは、ISO-8859として表示されます。 – onknows

+0

これは、編集者がエンコーディングが何であるかを推測していて、エンコーディングの1つに合うと思われるものを選択するためです。 「通常のテキスト」は、ASCII、UTF-8またはISO-8859-1と同様に有効に解釈できます。エディタは、適切なエンコーディングが何であるかというエディタの推測に依存します。異なるエディタでは、コンテンツからのエンコーディングを推測するルールが異なる場合があります。 – Jesper

答えて

2

7ビットASCIIはUTF-8のサブセットです。 ISO-8859-1は8ビットの問題のあるバイトを含むラテン1です。

誰かがUTF-8をエディタやIDEで操作しました。いくつかのバージョン管理チェックインはテキストをソースに戻しますが、あなたのケースではそうではないようです。

UTF-8は堅実な選択ですが、注意が必要です。

関連する問題