Saya sedang mengerjakan proyek Java yang mengeluarkan peringatan berikut ketika saya mengkompilasi:
/src/com/myco/apps/AppDBCore.java:439: warning: unmappable character for encoding UTF8
[javac] String copyright = "� 2003-2008 My Company. All rights reserved.";
Saya tidak yakin bagaimana SO akan membuat karakter sebelum tanggal, tetapi itu harus menjadi simbol hak cipta, dan ditampilkan dalam peringatan sebagai tanda tanya di berlian.
Perlu dicatat bahwa karakter tersebut muncul dalam artefak keluaran dengan benar, tetapi peringatannya merupakan gangguan dan file yang berisi kelas ini suatu hari nanti dapat disentuh oleh editor teks yang menyimpan pengkodean secara tidak benar ...
Bagaimana cara menyuntikkan karakter ini ke string "hak cipta" sehingga kompilator senang, dan simbol tersebut dipertahankan dalam file tanpa potensi masalah pengkodean ulang?
hexdump AppDBCore.java
entah bagaimana saya meragukannya\u00a9
dan sebaliknya adalah sesuatu yang berfungsi sebagian untuk Anda karena pengaturan sistem Anda. Tanda tanya di atas digunakan untuk menggantikan karakter masuk yang nilainya tidak diketahui atau tidak dapat direpresentasikanJawaban:
Gunakan format pelolosan "\ uxxxx".
Menurut Wikipedia , simbol hak cipta adalah unicode U + 00A9 sehingga baris Anda harus membaca:
sumber
Coba dengan: javac -encoding ISO-8859-1 file_name.java
sumber
<compilerarg line="-encoding utf-8"/>
bawah<javac>
panggilan yang berlaku diBuild.xml
file Anda . Ini cara yang buruk untuk melakukannya, tetapi Anda tidak punya pilihan. Lihat komentar panjang saya di atas.Jika Anda menggunakan Maven, setel
<encoding>
secara eksplisit dalam konfigurasi plugin compiler, missumber
project.build.sourceEncoding
properti.Ini membantu saya:
Sumber: http://whatiscomingtomyhead.wordpress.com/2012/01/02/get-rid-of-unmappable-character-for-encoding-cp1252-once-and-for-all/
sumber
javac MyJavaFile.java -encoding utf-8 -cp .;lib\*
Kemudian saat menjalankannya, saya tidak perlu menambahkan bagian pengkodean tambahan itu.letakkan baris ini di file .gradle yor di atas konfigurasi Java.
sumber
compileTestJava
dan untukjavadoc
jugaSering kali, kesalahan kompilasi ini terjadi ketika kompilasi file unicode (berenkode UTF-8)
dan juga Anda dapat menambahkan opsi kompilasi ini ke IDE Anda misalnya: Ide Intellij
(File> pengaturan> Java Compiler) tambahkan sebagai parameter baris perintah tambahan
sumber
Langkah Gradle
Jika Anda menggunakan Gradle, Anda dapat menemukan baris yang menerapkan plugin java:
Kemudian setel encoding untuk tugas kompilasi menjadi UTF-8:
Jika Anda memiliki pengujian unit, Anda mungkin ingin mengkompilasinya dengan UTF-8 juga:
Contoh Gradle Keseluruhan
Artinya, keseluruhan kode gradle akan terlihat seperti ini:
sumber
Ini berhasil untuk saya -
sumber
Jika Anda menggunakan eclipse (Eclipse dapat memberikan kode utf8 untuk Anda meskipun Anda menulis karakter utf8. Anda akan melihat karakter utf8 normal ketika Anda memprogram tetapi latar belakangnya adalah kode utf8);
PS: ini akan ok jika Anda nilai statis dalam kode. Untuk Contoh Tes string = "İİİİİııııııççççç";
sumber
Saya mengalami masalah yang sama, di mana indeks karakter yang dilaporkan dalam pesan kesalahan java salah. Saya mempersempitnya menjadi karakter kutip ganda sebelum posisi yang dilaporkan menjadi hex 094 (batalkan bukan kutipan, tetapi direpresentasikan sebagai kutipan) bukan hex 022. Segera setelah saya menukar varian hex 022 semuanya baik-baik saja.
sumber
Jika seseorang menggunakan Maven Build dari command prompt, ia juga dapat menggunakan perintah berikut:
sumber
Bagi mereka yang bertanya-tanya mengapa ini terjadi pada beberapa sistem dan tidak pada yang lain (dengan sumber yang sama, parameter build, dan sebagainya), periksa
LANG
variabel lingkungan Anda . Saya mendapatkan peringatan / kesalahan kapanLANG=C.UTF-8
, tetapi tidak ketikaLANG=en_US.UTF-8
.sumber