powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Зашился в кодировках
8 сообщений из 8, страница 1 из 1
Зашился в кодировках
    #34101481
vladik_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В винде в блокноте (кодировка Ср1251) описываю класс в котором есть строчки:

String err = "Ошибка!";
...
System.out.println(err); - в Command Promt видны вывело кракозябру :)

тогда я пошел другим путем и написал:

byte[] bErr = err.getBytes();
System.out.println("Cp1251 = "+new String(bErr, "Cp1251")); - вывело туже самую кракозябру, один в один

подставлял другие кодовые страницы (Cp866, UTF-8, UTF-16, US-ASCII) - таже хрень

что посоветуете?
...
Рейтинг: 0 / 0
Зашился в кодировках
    #34101872
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nativetoascii
...
Рейтинг: 0 / 0
Зашился в кодировках
    #34102103
Lennier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что мешает сохранить в блокноте с кодировкой UTF-8?
...
Рейтинг: 0 / 0
Зашился в кодировках
    #34102829
ponomarevvb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эхе-хе

String#getBytes():
API doc
Encodes this String into a sequence of bytes using the platform's default charset, storing the result into a new byte array.


Теперь о том, когда и как происходят преобразования символов.
Первый раз - когда исходник необходимо перевести в байт-код, где все символы хранятся в Юникоде. Для этого необходимо знать кодировку исходника, для Винды по умолчанию считается cp866.
Второй раз символы преобразуются при выводе на консоль - Юникод из байт-кода должен быть преобразован в кодировку, которая используется в консоли.

Наверное, лучший способ контролировать этот процесс - указывать кодировку явно и при компиляции и при запуске JVM. Для компиляции можно этого избежать, если писать строки сразу в Юникоде, в форме "\uXXXX".

При компиляции: javac -encoding кодировка YourClass.java
При выполнении: java -Dfile.encoding=кодировка YourClass

Ну, и как пример, смотрите аттач.
Компиляция:
1. javac -encoding cp1251 Test.java
2. javac -encoding cp866 Test.java

Выполнение (для обоих случаев):
java -Dfile.encoding=cp866 Test

Наслаждайтесь
...
Рейтинг: 0 / 0
Зашился в кодировках
    #34102881
danii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1.для окна коммандного процессора устанавливаем шрифт Lucinda Console
свойства -> шрифт,
2.выплняет команду chcp 1251
3.System.out.println("теперь мы видим русские буквы");
...
Рейтинг: 0 / 0
Зашился в кодировках
    #34105703
vladik_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
danii1.для окна коммандного процессора устанавливаем шрифт Lucinda Console
свойства -> шрифт,
2.выплняет команду chcp 1251
3.System.out.println("теперь мы видим русские буквы");

Спасибо! Это работает!
Только не до конца доганаяю - как?!

Поправьте меня (пишу немного утрированно, предполагаем, что под код символа выделяется один байт):
1. текст проги я набираю в кодировке "Ср1251"
2. при компиляции, компилятор все переводит в кодировку "Юникод", т.е. если при наборе проги, числовому значению (байту со значением) 145 в кодировке "Ср1251", пишу от фанаря, ставится в соответствие символ "а", то компилятор отыщет в таблице "Юникода" символ "а" и сопоставит ему новое числовое значение, допустим, 215? Или числовое значение 145 так и останется, только Java использая таблицу кодов "Юникод" будет ставить ему в соответствие другой символ?
3. при выводе, Java в выходной поток будет выдавать байт со значением 145 или 215?
4. интерпритирующая среда, в моем случае, это Command Promt винды, полученный байт будет интерпретировать в соответствии со своей кодовой страницей, которая может отличаться от кодовой страницы системы (винды)?

И еще вопрос: почему недостаточно выполнить только команду chcp 1251, а надо еще и шрифт Lucinda Console выбрать?
...
Рейтинг: 0 / 0
Зашился в кодировках
    #34110890
vladik_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vladik_k danii1.для окна коммандного процессора устанавливаем шрифт Lucinda Console
свойства -> шрифт,
2.выплняет команду chcp 1251
3.System.out.println("теперь мы видим русские буквы");

Спасибо! Это работает!
Только не до конца доганаяю - как?!

Поправьте меня (пишу немного утрированно, предполагаем, что под код символа выделяется один байт):
1. текст проги я набираю в кодировке "Ср1251"
2. при компиляции, компилятор все переводит в кодировку "Юникод", т.е. если при наборе проги, числовому значению (байту со значением) 145 в кодировке "Ср1251", пишу от фанаря, ставится в соответствие символ "а", то компилятор отыщет в таблице "Юникода" символ "а" и сопоставит ему новое числовое значение, допустим, 215? Или числовое значение 145 так и останется, только Java использая таблицу кодов "Юникод" будет ставить ему в соответствие другой символ?
3. при выводе, Java в выходной поток будет выдавать байт со значением 145 или 215?
4. интерпритирующая среда, в моем случае, это Command Promt винды, полученный байт будет интерпретировать в соответствии со своей кодовой страницей, которая может отличаться от кодовой страницы системы (винды)?

И еще вопрос: почему недостаточно выполнить только команду chcp 1251, а надо еще и шрифт Lucinda Console выбрать?

люди, разъясните пожалуйста
...
Рейтинг: 0 / 0
Зашился в кодировках
    #34115819
mysterio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не ожидал, что с такой простой проблемой народ будет так долго разбираться.
Подсказка: многие врапперы потоков в java.io.* имеют в конструкторах параметр-кодировку.
Например, PrintWriter или OutputStreamWriter.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Зашился в кодировках
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]