Error unmappable character 0x81 for encoding windows 1252

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:

  1. 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.

Пример Java кода

Среда Windows может быть любой, не обязательно седьмой версии. В данном случае имеет значение кодировка консоли по умолчанию.

Решение проблемы с компиляцией

Все просто, в командную строку необходимо ввести следующий текст — javac -encoding utf8 Solution.java (1). Тем самым сообщаем JDK (инструментарий для Java), что кодировка компилируемого исходного кода — utf-8. Теперь процедура компиляции Java через cmd завершается успешно и в папке solution появляется новый файл — Solution.class . Запускаем его на выполнение с помощью — java Solution и видим, что файл выполняется корректно и в командной строке отображают символы кириллицы.

Компиляция Java через cmd

В качестве эксперимента, меняем кодировку в командной строке на 1251, набрав — chcp 1251 (2), снова запускаем файл Solution.class. Опять все корректно выполняется и отображается. Для наглядности, все вышеперечисленные действия представлены в представленных скриншотах.

В сущности, ошибки не было, а была необходимость сообщить JDK про установленную кодировку в исходном коде. На такое решение натолкнула мысль, что компиляция одного и того же текста в Linux, в отличие от Windows, выполняется корректно.

Демонстрация в GNU/Linux Ubuntu

Из представленного далее скриншота следует, что терминал настроен на utf-8, а компиляция осуществляется этого же самого кода, что и в предыдущем случае, только в данном примере выполняется успешно с первого раза.

Компиляция Java через cmd в Ubuntu

⚬ ⚬ ⚬

Ничего сложного, таким образом решается проблема с кириллизацией в процессе компиляции 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) ;

  1. Select Project
  2. Right click and select Properties
  3. Select Resource on Resource Panel(Top of right menu which opened after 2.)
  4. 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

enter image description here

-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:

Contents

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

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Как поставить кастомный шрифт на windows 10
  • Как добавить windows boot manager на диск
  • Восстановить компьютер с помощью командной строки windows 10
  • Принтер статус отключен как включить windows 10
  • Апгрейд windows 10 до windows 10 professional