Describe the bug
When running the master branch tests at 455dbdb on Windows I get:
> Task :core:compileTestJava
C:\git-projects\gtfs-validator\core\src\test\java\org\mobilitydata\gtfsvalidator\parsing\CsvFileTest.java:153: error: unmappable character (0x8F) for encoding windows-1252
InputStream inputStream = toInputStream("stop_id,stop_name\n" + "s1,Перва�? о�?тановка\n");
^
C:\git-projects\gtfs-validator\core\src\test\java\org\mobilitydata\gtfsvalidator\parsing\CsvFileTest.java:153: error: unmappable character (0x81) for encoding windows-1252
InputStream inputStream = toInputStream("stop_id,stop_name\n" + "s1,Перва�? о�?тановка\n");
^
C:\git-projects\gtfs-validator\core\src\test\java\org\mobilitydata\gtfsvalidator\parsing\CsvFileTest.java:155: error: unmappable character (0x8F) for encoding windows-1252
assertThat(csvFile.iterator().next().asString(1)).isEqualTo("Перва�? о�?тановка");
^
C:\git-projects\gtfs-validator\core\src\test\java\org\mobilitydata\gtfsvalidator\parsing\CsvFileTest.java:155: error: unmappable character (0x81) for encoding windows-1252
assertThat(csvFile.iterator().next().asString(1)).isEqualTo("Перва�? о�?тановка");
^
C:\git-projects\gtfs-validator\core\src\test\java\org\mobilitydata\gtfsvalidator\parsing\RowParserTest.java:196: error: unmappable character (0x9D) for encoding windows-1252
RowParser parser = createParser("קו�?");
^
C:\git-projects\gtfs-validator\core\src\test\java\org\mobilitydata\gtfsvalidator\parsing\RowParserTest.java:197: error: unmappable character (0x9D) for encoding windows-1252
// .קו�? :the .COM equivalent in Hebrew
How we reproduce the bug
Steps to reproduce the behaviour:
- Run the unit tests on Windows 10
Expected behaviour
They should run without errors
Observed behaviour
I get the above error
Environment versions
- validator version: master branch tests at 455dbdb
- Java version: JDK 11
- OS versions: Windows 10
IntelliJ IDEA 2020.2.4 (Ultimate Edition)
Build #IU-202.8194.7, built on November 24, 2020
Runtime version: 11.0.9+11-b944.49 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Windows 10 10.0
GC: ParNew, ConcurrentMarkSweep
Memory: 1955M
Cores: 8
Non-Bundled Plugins: Lombook Plugin, idea.plugin.protoeditor, io.protostuff.protostuff-jetbrains-plugin, net.seesharpsoft.intellij.plugins.csv, org.jetbrains.kotlin
Обновлено: 2024-11-26
Посещений: 679
Бывает так, что в при компиляции Java через cmd появляется сообщение — error: unmappable character for encoding windows-1252 и на этом этапе компиляция аварийно завершается. Как правило, подобного рода проблема случается в Windows и успешно решается.
На всякий случай уточняю, аббревиатура cmd есть «интерпретатор командной строки» или еще варианты: «командная строка», «консоль», «терминал».
Исходные данные
В представленном скриншоте, можно видеть, что данный исходный код с кодированием utf-8 находится в среде Windows 7, где кодировка cmd по умолчанию — cp866.
Среда Windows может быть любой, не обязательно седьмой версии. В данном случае имеет значение кодировка консоли по умолчанию.
Решение проблемы с компиляцией
Все просто, в командную строку необходимо ввести следующий текст — javac -encoding utf8 Solution.java (1). Тем самым сообщаем JDK (инструментарий для Java), что кодировка компилируемого исходного кода — utf-8. Теперь процедура компиляции Java через cmd завершается успешно и в папке solution появляется новый файл — Solution.class . Запускаем его на выполнение с помощью — java Solution и видим, что файл выполняется корректно и в командной строке отображают символы кириллицы.
В качестве эксперимента, меняем кодировку в командной строке на 1251, набрав — chcp 1251 (2), снова запускаем файл Solution.class. Опять все корректно выполняется и отображается. Для наглядности, все вышеперечисленные действия представлены в представленных скриншотах.
В сущности, ошибки не было, а была необходимость сообщить JDK про установленную кодировку в исходном коде. На такое решение натолкнула мысль, что компиляция одного и того же текста в Linux, в отличие от Windows, выполняется корректно.
Демонстрация в GNU/Linux Ubuntu
Из представленного далее скриншота следует, что терминал настроен на utf-8, а компиляция осуществляется этого же самого кода, что и в предыдущем случае, только в данном примере выполняется успешно с первого раза.
⚬ ⚬ ⚬
Ничего сложного, таким образом решается проблема с кириллизацией в процессе компиляции Java через cmd.
Может возникнуть вопрос, зачем нужна эта возня с консолью? Гораздо проще выполнить то же самое с помощью комфортных программных средств (Ant, Maven, …). Дело в том, что встречаются ситуации, когда cmd помогает лучше понять процесс запуска приложения на этапе создания, особенно на начальном.
Также умение использования командной строки всегда полезно и обязательно пригодится в трудной ситуации, когда графический интерфейс в Windows будет бессилен. А в семействе UXIX подобных ОС это необходимый рабочий инструмент. Где рекомендуется научиться работать. Выбор широк: FreeBCD, OpenBSD, NetBSD и Linux со множеством дистрибутивов.
| UnsupportedClassVersionError | |
| java: error: release version 5 not supported | |
| unmappable character (0x8F) for encoding windows-1252 | |
| Другие статьи о Java |
Введение
UnsupportedClassVersionError
Error: A JNI error has occurred, please check your installation and try again
Exception in thread «main» java.lang.UnsupportedClassVersionError: hudson/remoting/Launcher has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:601)
Agent JVM has terminated. Exit code=1
Эта ошибка часто возникает при использовании
Jenkins
версии 2.357 и выше
с работниками на которых установлена восьмая Java. Проверьте версию Java на хосте работника, если
вы подключаете его напрямую и в
Dockerfile
если вы используете работников в
Docker
что является более новым подходом.
java: error: release version 5 not supported
Эта ошибка говорит о том, что вы используете SDK выше 8 а байткод в
который пытаетесь скомпилировать — версии 5.
После восьмой версии Java байткод пятой версии уже не поддерживается.
Это одна из причин по которой версия 8 считается наиболее
«стабильной»
Я не советую менять SDK на 8, лучше поменять target bytecode.
В
IntelliJ IDEA
это можно сделать следующим образом
File → Settings → Build, Execution, Deployment → Compiler
→ Target bytecode version → 14
14 выбирать не обязательно, но вам явно будет нужно что-то выше 5
error: unmappable character (0x8F) for encoding windows-1252
Если у вас в коде комментарии на русском и при компиляции появляется
error: unmappable character (0x8F) for encoding windows-1252
Автор статьи: Андрей Олегович
Похожие статьи
| Программирование на Java | |
| Установка Java | |
| Intellij | |
| Компиляция и запуск Java кода | |
| final | |
| switch | |
| Определить тип переменной | |
| Генератор случайных чисел | |
| Импорт из других классов | |
| Запросы к REST API на Java | |
| Ошибки | |
| Maven |
I’m currently working on a Java project that is emitting the following warning when I compile:
/src/com/myco/apps/AppDBCore.java:439: warning: unmappable character for encoding UTF8
[javac] String copyright = "� 2003-2008 My Company. All rights reserved.";
I’m not sure how SO will render the character before the date, but it should be a copyright symbol, and is displayed in the warning as a question mark in a diamond.
It’s worth noting that the character appears in the output artifact correctly, but the warnings are a nuisance and the file containing this class may one day be touched by a text editor that saves the encoding incorrectly…
How can I inject this character into the “copyright” string so that the compiler is happy, and the symbol is preserved in the file without potential re-encoding issues?
Comments:
Use the “uxxxx” escape format.
According to Wikipedia, the copyright symbol is unicode U+00A9 so your line should read:
String copyright = "u00a9 2003-2008 My Company. All rights reserved.";
Answers:
Try with:
javac -encoding ISO-8859-1 file_name.java
Answers:
If you use eclipse (Eclipse can put utf8 code for you even you write utf8 character. You will see normal utf8 character when you programming but background will be utf8 code) ;
- Select Project
- Right click and select Properties
- Select Resource on Resource Panel(Top of right menu which opened after 2.)
- You can see in Resource Panel, Text File Encoding, select other which you want
P.S : this will ok if you static value in code. For Example String test = “İİİİİııııııççççç”;
Answers:
I had the same problem, where the character index reported in the java error message was incorrect. I narrowed it down to the double quote characters just prior to the reported position being hex 094 (cancel instead of quote, but represented as a quote) instead of hex 022. As soon as I swapped for the hex 022 variant all was fine.
Answers:
If you’re using Maven, set the <encoding> explicitly in the compiler plugin’s configuration, e.g.
<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>
Answers:
This helped for me:
All you need to do, is to specify a envirnoment variable called
JAVA_TOOL_OPTIONS. If you set this variable to -Dfile.encoding=UTF8,
everytime a JVM is started, it will pick up this information.
Source: http://whatiscomingtomyhead.wordpress.com/2012/01/02/get-rid-of-unmappable-character-for-encoding-cp1252-once-and-for-all/
Answers:
Most of the time this compile error comes when unicode(UTF-8 encoded) file compiling
javac -encoding UTF-8 HelloWorld.java
and also You can add this compile option to your IDE
ex: Intellij idea
(File>settings>Java Compiler) add as additional command line parameter
-encoding : encoding
Set the source file encoding name, such as EUC-JP and UTF-8.. If -encoding is not specified, the platform default converter is used. (DOC)
Answers:
If one is using Maven Build from the command prompt one can use the following command as well:
mvn -Dproject.build.sourceEncoding=UTF-8
Answers:
put this line in yor file .gradle above the Java conf.
apply plugin: 'java'
compileJava {options.encoding = "UTF-8"}
Answers:
This worked for me –
<?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>
Answers:
Gradle Steps
If you are using Gradle then you can find the line that applies the java plugin:
apply plugin: 'java'
Then set the encoding for the compile task to be UTF-8:
compileJava {options.encoding = "UTF-8"}
If you have unit tests, then you probably want to compile those with UTF-8 too:
compileTestJava {options.encoding = "UTF-8"}
Overall Gradle Example
This means that the overall gradle code would look something like this:
apply plugin: 'java'
compileJava {options.encoding = "UTF-8"}
compileTestJava {options.encoding = "UTF-8"}
Answers:
For those wondering why this happens on some systems and not on others (with the same source, build parameters, and so on), check your LANG environment variable. I get the warning/error when LANG=C.UTF-8, but not when LANG=en_US.UTF-8.
Answers:
| Introduction | |
| Related Articles |
Introduction
Java — строго типизированный объектно-ориентированный язык программирования
общего назначения, разработанный компанией Sun Microsystems
(в последующем приобретённой компанией Oracle).
Разработка ведётся сообществом, организованным через
Java Community Process, язык и основные реализующие его
технологии распространяются по лицензии GPL.
Права на торговую марку принадлежат корпорации Oracle.
Приложения Java обычно транслируются в специальный байт-код, поэтому они могут
работать на любой компьютерной архитектуре, для которой существует реализация
virtual Java-машины.
Дата официального выпуска — 23 мая 1995 года.
На 2020 год Java — один из самых популярных языков программирования.
Errors
java: error: release version 5 not supported
Эта ошибка говорит о том, что вы используете SDK выше 8 а байткод в
который пытаетесь скомпилировать — версии 5.
После восьмой версии Java байткод пятой версии уже не поддерживается.
Это одна из причин по которой версия 8 считается наиболее
«стабильной»
Я не советую менять SDK на 8, лучше поменять target bytecode.
В IntelliJ IDEA это можно сделать следующийм образом
File → Settings → Build, Execution, Deployment → Compiler
→ Target bytecode version → 14
14 выбирать не обязательно, но вам явно будет нужно что-то выше 5
error: unmappable character (0x8F) for encoding windows-1252
Если у вас в коде комментарии на русском и при компиляции появляется
error: unmappable character (0x8F) for encoding windows-1252
Related Articles
| Development на Java | |
| Установка Java | |
| Intellij | |
| Компиляция и запуск Java кода | |
| final | |
| switch | |
| Определить тип переменной | |
| Генератор случайных чисел | |
| Импорт из других классов | |
| Maven | |
| JUnit |
