web-dev-qa-db-ja.com

Javaの「エンコードにマップできない文字」警告

私は現在、コンパイル時に次の警告を発しているJavaプロジェクトに取り組んでいます:

/src/com/myco/apps/AppDBCore.Java:439: warning: unmappable character for encoding UTF8
    [javac]         String copyright = "� 2003-2008 My Company. All rights reserved.";

SOが日付の前にどのように文字をレンダリングするかわかりませんが、著作権記号である必要があり、警告の中で菱形の疑問符として表示されます。

文字が出力アーティファクトに正しく表示されることは注目に値しますが、警告は迷惑であり、このクラスを含むファイルは、エンコーディングを誤って保存するテキストエディタによっていつか変更される可能性があります...

この文字を「著作権」文字列に挿入すると、コンパイラが満足し、再エンコードの問題が発生することなくシンボルがファイルに保存されます。

103
seanhodges

「\ uxxxx」エスケープ形式を使用します。

Wikipedia によると、著作権記号はUnicode U + 00A9であるため、行は次のようになります。

String copyright = "\u00a9 2003-2008 My Company. All rights reserved.";
52
Jon Skeet

試してください:javac -encoding ISO-8859-1 file_name.Java

89
Fernando Nah

Mavenを使用している場合、コンパイラプラグインの構成で<encoding>を明示的に設定します。

<build>
    <plugins>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
41
Thomas Leonard

これは私を助けました:

必要なことは、Java_TOOL_OPTIONSという環境変数を指定することだけです。この変数を-Dfile.encoding = UTF8に設定すると、JVMが起動するたびにこの情報が取得されます。

ソース: http://whatiscomingtomyhead.wordpress.com/2012/01/02/get-rid-of-unmappable-character-for-encoding-cp1252-once-and-for-all/

30
nightlyop

この行をJava confの上のyorファイル.gradleに入れます。

apply plugin: 'Java'
compileJava {options.encoding = "UTF-8"}   
20
Alobes5

ほとんどの場合、このコンパイルエラーはunicode(UTF-8エンコード)ファイルのコンパイル時に発生します

javac -encoding UTF-8 HelloWorld.Java

また、このコンパイルオプションをIDEに追加できます例:Intellij idea
(ファイル>設定> Javaコンパイラ)追加のコマンドラインパラメータとして追加

enter image description here

-encoding:encodingソースファイルのエンコーディング名(EUC-JPやUTF-8など)を設定します。-encodingが指定されていない場合、プラットフォームのデフォルトコンバーターが使用されます。 ( DOC

7
Alupotha

Gradle Steps

Gradleを使用している場合は、Javaプラグインを適用する行を見つけることができます。

apply plugin: 'Java'

次に、コンパイルタスクのエンコーディングをUTF-8に設定します。

compileJava {options.encoding = "UTF-8"}   

ユニットテストがある場合は、おそらくUTF-8でコンパイルすることもできます。

compileTestJava {options.encoding = "UTF-8"}

全体的なGradleの例

これは、全体的なgradleコードが次のようになることを意味します。

apply plugin: 'Java'
compileJava {options.encoding = "UTF-8"}
compileTestJava {options.encoding = "UTF-8"}
4
Luke Machowski

これは私のために働いた-

    <?xml version="1.0" encoding="utf-8" ?>
<project name="test" default="compile">
    <target name="compile">
        <javac srcdir="src" destdir="classes" 
                           encoding="iso-8859-1" debug="true" />
    </target>
</project>
2
Dxx0

コマンドプロンプトからMaven Buildを使用している場合は、次のコマンドも使用できます。

                    mvn -Dproject.build.sourceEncoding=UTF-8
1
5122014009

Eclipseを使用する場合(Eclipseはutf8文字を記述してもutf8コードを配置できます。プログラミング時に通常のutf8文字が表示されますが、背景はutf8コードになります)。

  1. プロジェクトを選択します
  2. 右クリックしてPropertiesを選択します
  3. リソース on リソースパネル(2の後に開いた右メニューの上部)を選択します
  4. リソースパネルテキストファイルエンコーディングで確認できます。

P.S:これは、コード内の静的な値であれば問題ありません。たとえば、String test = "İİİİİııııııççççç";

1
baybora.oren

同じ問題があり、Javaエラーメッセージで報告された文字インデックスが正しくありませんでした。報告された位置が16進数022の代わりに16進数094(引用ではなくキャンセル、引用として表される)になる直前の二重引用文字に絞り込みました。

1
Kelvin Goodson