Konstantin Valeev

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

6 0

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

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

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

0

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

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

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_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage находим ключ ACP в котором нужно поменять значение (value data) с 1252 на 1251.

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

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

0

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

0

Похожие вопросы

Юля Оболоша 30 августа 2019 →

Здравствуйте. В уроке в последнем примере есть вызов класса: setSetSpeed(newSpeed); В классе setSetSpeed з...

Egor Bulkov 23 июля 2019 →

Думал промолчу...Но после третьего просмотра ролика, все же решил оставить небольшой комментарий, для нович...

Владимир Плигин 19 июня 2019 →

Здравствуйте! В описании есть следующий абзац: Если метод статический, то его можна вызвать как через объек...

Viktor Podzirov 09 мая 2019 →

Здравствуйте. Ссылочная переменная это же по сути указатель как в си ? Когда мы создаем объект у нас созд...

Чингиз Жарас 25 декабря 2018 →

У метода main есть переменная this?

Мы учим программированию с нуля до стажировки и работы. Попробуйте наш бесплатный курс «Введение в программирование» или полные программы обучения по Javascript, PHP, Python и Java.

Хекслет

Подробнее о том, почему наше обучение работает →