Error unmappable character for encoding cp1252

Как правильно компилировать код с кириллицей? У меня при компиляции возникает error: unmappable character for encoding Cp1252, пробовал добавлять -encoding="... [33704]

Konstantin Valeev

Как правильно компилировать код с кириллицей? У меня при компиляции возникает error: unmappable character for encoding Cp1252, пробовал добавлять -encoding=»UTF-8″ — javac не принимает параметр.

Сергей Алексеенко

Здравствуйте.

Было бы хорошо увидеть пример того, что Вы пытаетесь скомпилировать.

Java нормально работает с кириллицей, как с текстом. А вот код должен быть обязательно латиницей. Попробуйте сменить кодировку файла, который пытаетесь скомпилировать, в редакторе, до того как скормите его javac-у.


0

Konstantin Valeev

Компилирую код, который вы приложили к уроку, ничего кроме:

public class Car {
    static int speed;

    public static void main(String... args) {
        Car ta4ka = new Car();

        System.out.println("speed в хипе при создании объекта = " + ta4ka.speed); // 0

        ta4ka.setSpeed(12); // Вызываем конкретную функцию(метод) из новосозданого объекта
                            // Значение хранится в фрейме в переменной newSpeed
    }

    public void showSpeed() {    // выводит значение из хипа по ссылке this
        System.out.println("speed в хипе на момент вызова 'showSpeed()' = " + this.speed);
    }

    public void setSpeed(int newSpeed) { // принимаем значение 12. newSpeed это переменная объявленная внутри метода --> хранится в стеке фрейма метода

        this.speed = newSpeed; // записываем по this-ссылке в хип значение из стека метода setSpeed
        showSpeed();// выводим на экран значение из хипа // 12

        newSpeed = 8;// записали новое значение в стеке в фрейме метода setSpeed

        System.out.println("переменная newSpeed в фрейме метода setSpeed в стеке = " + newSpeed); // 8

        // присваиваем переменной speed новое значение = 3
        speed = 3; // В стеке нет такой переменной, потому значение будет записано в хип!
        System.out.println("Java сама добавила this перед именем 'speed' и записала новое значение speed в хип = " + this.speed); // 3

        setSetSpeed(newSpeed); // передаем значение newSpeed = 8

    }

    public void setSetSpeed(int speed) { // теперь и только теперь и в фрейме метода setSetSpeed в стеке есть своя переменная c именем speed!

        System.out.println("Значение speed в хипе = " + this.speed); // 3

        speed = speed;//в стеке speed сама себя переприсваивает.
        System.out.println("переменная speed в фрейме стека = " + speed); // 8

        this.speed = speed; // присваиваем значение speed из фрейма значению speed в хипе!
        System.out.println("Значение speed в хипе заданое уже методом setSetSpeed = " + this.speed); // показываем speed из хипа. // 8
    }
}

Sublime пишет что кодировка UTF-8.


0

Сергей Алексеенко

У меня этот код компилится и под Windows и под Ubuntu.

А какая версия ОС у вас (какого года)? Какая версия java, javac?


0

Konstantin Valeev

Microsoft Windows 10 Enterprise
10.0.17763 N/A Build 17763

java version «1.8.0_221»
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)

javac 1.8.0_221


0

Сергей Алексеенко

Что ж.

Это определенно проблема в самой операционной системе.

Скорее всего в настройках региональных стандартов нужно выставить «язык программ, не поддерживающих Юникод» с Английского на Русский. Но придется менять язык системы.

Есть возможность исправить проблему кодировки через реестр:

Запускаем regedit (Win + R —> regedit) и по пути HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlNlsCodePage находим ключ ACP в котором нужно поменять значение (value data) с 1252 на 1251.

Потребуется перезагрузка системы.

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


0

Konstantin Valeev

Компьютер рабочий, прав на такое нет. Если убрать все русские комментарии — код компилируется.
Проблема понятна, спасибо!


0

Андрей Абрашкин

Сергей Алексеенко, у меня в реестре всё так, как вы рекомендуете и в настройках региональных стандартов тоже, однако проблему это не решает. Ошибка есть.


0

Андрей Абрашкин

Не знаю, в чём было дело, но конкретно в моём случае, компилятору не нравилась заглавная буква И. Причем не важно, в каком месте я её ставлю. Исправил на маленькую «и» и всё скомпилировалось.


0

Сергей Алексеенко

Очевидно javac ничего не знает про «и» в верхнем регистре в UTF-8. И этот баг с буквой «И» я не смог победить в javac.

Но нашел еще два способа как обойти в общем проблему с кодировкой:

1) Создать в Sublime текстовый файл в нужной кодировке, а потом туда скопировать код. Как создать: New File, потом file —> Save vith Encoding и сохраняем файл в нужной кодировке. И только потом копируем код в этот сохраненный файл. Сохраняем после копирования. Тестируем.
2) Зайти в настройки региональных стандартов и нажать там одну галочку: скрин настроек.

В результате применения второго способа у меня пропала козябра в WindowsPowerShell, при исполнении данного кода.
Побочных ефектов в других программах я пока не заметил.


0

Андрей Абрашкин

Сергей Алексеенко, первый способ — это самое первое, что я попробовал, но, к сожалению, не помогло. А вот крыж из второго способа, видимо, из 10ки, на win7 отсутствует. Спасибо за советы! Впервые вижу столь оперативную обратную связь)


1

Сергей Алексеенко

Андрей Абрашкин, первый способ тоже должен работать. Нужно внимательно произвести описанные действия. Там важно сохранять файл на каждом этапе. Можно еще включить отображение кодировок в Sublime: в настройках пользователя добавить «show_encoding»: true. И ни в коем случае не впечатывать туда «И». ))


0

Андрей Абрашкин

Сергей Алексеенко, ааа, не впечатывать «И»))) Тогда да, тогда сорри, недопонял, тогда всё работает! Без «И»)) Честно говоря, Sublime мне как-то не зашёл… Давно правда это было. Может сейчас изменится мнение, но я пока на Notepad++ и AkelPad сижу. В Npp вкладки и подсветка синтаксиса. В AkelPad удобство смены кодировки и работы с текстом больших размеров. Надо бы снова присмотреться к Sublime…


0

This encodes the Unicode codepoints in JavaScript to windows-1251:

var DMap = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 10: 10, 11: 11, 12: 12, 13: 13, 14: 14, 15: 15, 16: 16, 17: 17, 18: 18, 19: 19, 20: 20, 21: 21, 22: 22, 23: 23, 24: 24, 25: 25, 26: 26, 27: 27, 28: 28, 29: 29, 30: 30, 31: 31, 32: 32, 33: 33, 34: 34, 35: 35, 36: 36, 37: 37, 38: 38, 39: 39, 40: 40, 41: 41, 42: 42, 43: 43, 44: 44, 45: 45, 46: 46, 47: 47, 48: 48, 49: 49, 50: 50, 51: 51, 52: 52, 53: 53, 54: 54, 55: 55, 56: 56, 57: 57, 58: 58, 59: 59, 60: 60, 61: 61, 62: 62, 63: 63, 64: 64, 65: 65, 66: 66, 67: 67, 68: 68, 69: 69, 70: 70, 71: 71, 72: 72, 73: 73, 74: 74, 75: 75, 76: 76, 77: 77, 78: 78, 79: 79, 80: 80, 81: 81, 82: 82, 83: 83, 84: 84, 85: 85, 86: 86, 87: 87, 88: 88, 89: 89, 90: 90, 91: 91, 92: 92, 93: 93, 94: 94, 95: 95, 96: 96, 97: 97, 98: 98, 99: 99, 100: 100, 101: 101, 102: 102, 103: 103, 104: 104, 105: 105, 106: 106, 107: 107, 108: 108, 109: 109, 110: 110, 111: 111, 112: 112, 113: 113, 114: 114, 115: 115, 116: 116, 117: 117, 118: 118, 119: 119, 120: 120, 121: 121, 122: 122, 123: 123, 124: 124, 125: 125, 126: 126, 127: 127, 1027: 129, 8225: 135, 1046: 198, 8222: 132, 1047: 199, 1168: 165, 1048: 200, 1113: 154, 1049: 201, 1045: 197, 1050: 202, 1028: 170, 160: 160, 1040: 192, 1051: 203, 164: 164, 166: 166, 167: 167, 169: 169, 171: 171, 172: 172, 173: 173, 174: 174, 1053: 205, 176: 176, 177: 177, 1114: 156, 181: 181, 182: 182, 183: 183, 8221: 148, 187: 187, 1029: 189, 1056: 208, 1057: 209, 1058: 210, 8364: 136, 1112: 188, 1115: 158, 1059: 211, 1060: 212, 1030: 178, 1061: 213, 1062: 214, 1063: 215, 1116: 157, 1064: 216, 1065: 217, 1031: 175, 1066: 218, 1067: 219, 1068: 220, 1069: 221, 1070: 222, 1032: 163, 8226: 149, 1071: 223, 1072: 224, 8482: 153, 1073: 225, 8240: 137, 1118: 162, 1074: 226, 1110: 179, 8230: 133, 1075: 227, 1033: 138, 1076: 228, 1077: 229, 8211: 150, 1078: 230, 1119: 159, 1079: 231, 1042: 194, 1080: 232, 1034: 140, 1025: 168, 1081: 233, 1082: 234, 8212: 151, 1083: 235, 1169: 180, 1084: 236, 1052: 204, 1085: 237, 1035: 142, 1086: 238, 1087: 239, 1088: 240, 1089: 241, 1090: 242, 1036: 141, 1041: 193, 1091: 243, 1092: 244, 8224: 134, 1093: 245, 8470: 185, 1094: 246, 1054: 206, 1095: 247, 1096: 248, 8249: 139, 1097: 249, 1098: 250, 1044: 196, 1099: 251, 1111: 191, 1055: 207, 1100: 252, 1038: 161, 8220: 147, 1101: 253, 8250: 155, 1102: 254, 8216: 145, 1103: 255, 1043: 195, 1105: 184, 1039: 143, 1026: 128, 1106: 144, 8218: 130, 1107: 131, 8217: 146, 1108: 186, 1109: 190}

function UnicodeToWin1251(s) {
    var L = []
    for (var i=0; i<s.length; i++) {
        var ord = s.charCodeAt(i)
        if (!(ord in DMap))
            throw "Character "+s.charAt(i)+" isn't supported by win1251!"
        L.push(String.fromCharCode(DMap[ord]))
    }
    return L.join('')
}

JavaScript stores each character as raw Unicode codepoints, so the above should work before getting the hash using SHA512.

Содержание

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
Определить тип переменной
Генератор случайных чисел
Импорт из других классов
Ошибки
Maven
JUnit

Понравилась статья? Поделить с друзьями:
  • Error unknown procedure parent 2 dwim could not correct goal
  • Error unexpected mutation of prop vue no mutating props
  • Error unexpected end of file radmir
  • Error uncaught rangeerror webassembly memory could not allocate memory
  • Error unauthorized authentication required docker