Obecnie pracuję nad projektem Java, który emituje następujące ostrzeżenie podczas kompilacji:
/src/com/myco/apps/AppDBCore.java:439: warning: unmappable character for encoding UTF8
[javac] String copyright = "� 2003-2008 My Company. All rights reserved.";
Nie jestem pewien, jak SO wyrenderuje postać przed datą, ale powinien to być symbol praw autorskich i jest wyświetlany w ostrzeżeniu jako znak zapytania w diamentie.
Warto zauważyć, że znak pojawia się poprawnie w artefakcie wyjściowym, ale ostrzeżenia są uciążliwe i plik zawierający tę klasę może pewnego dnia zostać dotknięty przez edytor tekstu, który zapisuje kodowanie niepoprawnie ...
Jak mogę wstawić ten znak do ciągu znaków „copyright”, aby kompilator był zadowolony, a symbol został zachowany w pliku bez potencjalnych problemów z ponownym kodowaniem?
hexdump AppDBCore.java
jakoś wątpię w to,\u00a9
a zamiast tego jest to coś, co częściowo działa dla ciebie z powodu konfiguracji systemu. Powyższy znak zapytania jest używany do zastąpienia przychodzącego znaku, którego wartość jest nieznana lub niereprezentowalna w Unicode hexutf8.com/ ...Odpowiedzi:
Użyj formatu zmiany znaczenia „\ uxxxx”.
Według Wikipedii symbolem praw autorskich jest unicode U + 00A9, więc wiersz powinien brzmieć:
źródło
Spróbuj z: javac -encoding ISO-8859-1 nazwa_pliku.java
źródło
<compilerarg line="-encoding utf-8"/>
pod odpowiednim<javac>
wywołaniem w swoimBuild.xml
pliku. To zły sposób, ale nie masz wyboru. Zobacz mój długi komentarz u góry.Jeśli używasz Mavena, ustaw
<encoding>
jawnie w konfiguracji wtyczki kompilatora, npźródło
project.build.sourceEncoding
właściwość.Pomogło mi to:
Źródło: http://whatiscomingtomyhead.wordpress.com/2012/01/02/get-rid-of-unmappable-character-for-encoding-cp1252-once-and-for-all/
źródło
javac MyJavaFile.java -encoding utf-8 -cp .;lib\*
Następnie podczas uruchamiania nie musiałem dodawać tej dodatkowej części kodującej.umieść tę linię w swoim pliku .gradle powyżej konfiguracji Java.
źródło
compileTestJava
ijavadoc
jak dobrzeW większości przypadków ten błąd kompilacji pojawia się podczas kompilacji pliku w formacie Unicode (zakodowanym w UTF-8)
a także Możesz dodać tę opcję kompilacji do swojego IDE np .: Intellij idea
(Plik> ustawienia> Kompilator Java) dodaj jako dodatkowy parametr wiersza poleceń
źródło
Gradle Steps
Jeśli używasz Gradle, możesz znaleźć wiersz, który stosuje wtyczkę java:
Następnie ustaw kodowanie dla zadania kompilacji na UTF-8:
Jeśli masz testy jednostkowe, prawdopodobnie chcesz je skompilować również z UTF-8:
Ogólny przykład Gradle
Oznacza to, że ogólny kod gradle wyglądałby mniej więcej tak:
źródło
To zadziałało dla mnie -
źródło
Jeśli używasz eclipse (Eclipse może umieścić kod utf8 za Ciebie, nawet jeśli napiszesz znak utf8. Podczas programowania zobaczysz normalny znak utf8, ale tło będzie kodem utf8);
PS: to będzie w porządku, jeśli masz statyczną wartość w kodzie. Na przykład Test String = "İİİİİııııııççççç";
źródło
Miałem ten sam problem, gdzie indeks znaków zgłoszony w komunikacie o błędzie java był niepoprawny. Zawęziłem to do znaków podwójnego cudzysłowu tuż przed zgłoszoną pozycją szesnastkową 094 (anuluj zamiast cudzysłowu, ale przedstawioną jako cudzysłów) zamiast szesnastkowego 022. Jak tylko zamieniłem wariant szesnastkowy 022, wszystko było w porządku.
źródło
Jeśli używasz Maven Build z wiersza poleceń, możesz również użyć następującego polecenia:
źródło
Dla tych, którzy zastanawiają się, dlaczego tak się dzieje w niektórych systemach, a nie w innych (z tym samym źródłem, parametrami kompilacji itd.), Sprawdź swoją
LANG
zmienną środowiskową . Otrzymuję ostrzeżenie / błąd kiedyLANG=C.UTF-8
, ale nie kiedyLANG=en_US.UTF-8
.źródło