|
|
|
Зашился в кодировках
|
|||
|---|---|---|---|
|
#18+
В винде в блокноте (кодировка Ср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) - таже хрень что посоветуете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2006, 16:01:53 |
|
||
|
Зашился в кодировках
|
|||
|---|---|---|---|
|
#18+
nativetoascii ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2006, 17:31:48 |
|
||
|
Зашился в кодировках
|
|||
|---|---|---|---|
|
#18+
Что мешает сохранить в блокноте с кодировкой UTF-8? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2006, 18:34:41 |
|
||
|
Зашился в кодировках
|
|||
|---|---|---|---|
|
#18+
Эхе-хе 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 Наслаждайтесь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2006, 09:21:33 |
|
||
|
Зашился в кодировках
|
|||
|---|---|---|---|
|
#18+
1.для окна коммандного процессора устанавливаем шрифт Lucinda Console свойства -> шрифт, 2.выплняет команду chcp 1251 3.System.out.println("теперь мы видим русские буквы"); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2006, 09:39:48 |
|
||
|
Зашился в кодировках
|
|||
|---|---|---|---|
|
#18+
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 выбрать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2006, 15:43:52 |
|
||
|
Зашился в кодировках
|
|||
|---|---|---|---|
|
#18+
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 выбрать? люди, разъясните пожалуйста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2006, 09:16:12 |
|
||
|
Зашился в кодировках
|
|||
|---|---|---|---|
|
#18+
Не ожидал, что с такой простой проблемой народ будет так долго разбираться. Подсказка: многие врапперы потоков в java.io.* имеют в конструкторах параметр-кодировку. Например, PrintWriter или OutputStreamWriter. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2006, 13:39:31 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=684&tid=2147544]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 297ms |
| total: | 441ms |

| 0 / 0 |
