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 |