Вопрос по кодировкам =(
От: Inco  
Дата: 23.01.06 18:04
Оценка:
У меня такой тарбл....прога на джаве выводит в консоль System.out.print....
если делать так System.out.print(" Что-нибудь на русском");
то это выводится крикозяблинами, так как не те кодироваки... как сделать так, чтобы текст читался по русски, то есть поменять кодировку выводимой стринги?
(прога нужны правильные кодировке не в IDE а в при запуске в консоли cmd)

пробовал так...



        String sourceString = "Что-нибудь на русском";

        byte[] b = sourceString.getBytes("Cp1251");

        String s = new String(b,"Cp866");
        System.out.print(s);


то он кричит, что

Exception in thread "main" java.io.UnsupportedEncodingException: Cp866
at sun.io.Converters.getConverterClass(Unknown Source)
at sun.io.Converters.newConverter(Unknown Source)
at sun.io.ByteToCharConverter.getConverter(Unknown Source)
at java.lang.StringCoding.decode(Unknown Source)
at java.lang.String.<init>(Unknown Source)
at java.lang.String.<init>(Unknown Source)
at Lab2Task1.main(Lab2Task1.java:29)


Re: Вопрос по кодировкам =(
От: Donz Россия http://donz-ru.livejournal.com
Дата: 23.01.06 18:25
Оценка:
Здравствуйте, Inco, Вы писали:

Этим ты точно не добьёшься ничего, даже если Cp866 поддерживалась (кстати, она поддерживается, надо только подключить charsets.jar. В общем, читать тут: j2sdk-1_4_2-doc\guide\intl\encoding.doc.html ).

I>
I>        String sourceString = "Что-нибудь на русском";

I>        byte[] b = sourceString.getBytes("Cp1251");
//Создаётся массив байт, в котором хранятся коды символов, взятые из кодировки Cp1251
I>        String s = new String(b,"Cp866");
//Создаётся строка из массива байт, JVM при этом думает, что байты в массиве имеют коды, взятые из кодировки Cp866, в строке получишь фигню
I>        System.out.print(s);
I>



I>то он кричит, что


I>Exception in thread "main" java.io.UnsupportedEncodingException: Cp866


Эта кодировка поддерживается, но её надо подключить, возможно получится простым подключением джара lib/charsets.jar
Вывод на консоль на русском языке обговорён в задании? Если он не нужен, а ты его для отладки используешь, то лучше пиши на английском, либо пиши в файл
Re[2]: Вопрос по кодировкам =(
От: Inco  
Дата: 23.01.06 18:44
Оценка:
Ага, смысл как раз в том, чтобы вывести строку на русском на консоль...
Re[3]: Вопрос по кодировкам =(
От: Lucker Беларусь http://lucker.intervelopers.com/
Дата: 23.01.06 18:53
Оценка:
Здравствуйте, Inco, Вы писали:

I>Ага, смысл как раз в том, чтобы вывести строку на русском на консоль...

пускай с пропертей -Dfile.encoding=cp866
#333355130
Re[4]: Вопрос по кодировкам =(
От: Inco  
Дата: 23.01.06 19:04
Оценка:
Здравствуйте, Lucker, Вы писали:

L>Здравствуйте, Inco, Вы писали:


I>>Ага, смысл как раз в том, чтобы вывести строку на русском на консоль...

L>пускай с пропертей -Dfile.encoding=cp866

Не помогает =(
Re[5]: Вопрос по кодировкам =(
От: VaGon Россия  
Дата: 24.01.06 04:32
Оценка: 3 (1)
Делай так,
include java.io;
...
String s="Что-то на русском";
 try{
     System.out.println(new String(s.getBytes("Cp866")));
 }catch(UnsupportedEncodingException ex){
     System.out.println("UnsupportedEncodingException in StringRecoder.recode with message: "+ex.getMessage());
 }
Re[5]: Вопрос по кодировкам =(
От: Lucker Беларусь http://lucker.intervelopers.com/
Дата: 24.01.06 06:37
Оценка: 19 (7)
Здравствуйте, Inco, Вы писали:

L>>пускай с пропертей -Dfile.encoding=cp866


I>Не помогает =(


ЭЭЭЭ, да ну на.....
Заходим в консоль и проверяем

c:\chcp<ENTER>
Текущая кодовая страница: 866


пишем тест. Файл в кодировке Windows-1251
public class Test {
    public static void main(String[] args) {
        System.out.println("Просто текст!!!");
    }
}


Компилируем. Платформа WindowsXP, дефултная кодировка Windows-1251
c:\javac Test.java


или

Компилируем. Платформа любая, дефултная кодировка не важно
c:\javac -encoding Windows-1251 Test.java //вместо Windows-1251 нужно использовать именно ту кодировку, в которой написан файл Test.java


пускаем
c:\java Test
¦ЁюёЄю ЄхъёЄ!!!


не порядок.
пускаем правильно
c:\java -Dfile.encoding=cp866 Test
Просто текст!!!


Замечания.
1) Те кто пишут код в современных IDE обычно не задумываются над тем в какой кодировке их исходные коды — всю ответственность на себя берет IDE. По умолчанию большинство из них используют дефултныю кодировку для системы, но позволяют выставить любое другое значение в настройках. Если значение изменено, то при компиляции они сами выставляют флаг -encoding в нужное значение.
2) Очнь важно осознавать границы, на которых происходит преобразование массива байт, представляющих строку в одной кодировке в массив байт, представляющих ту же строку в другой кодировке, и то что все операции ввода-вывода так или иначе сводятся к манипуляции массивами байтов. В данном примере две границы: первая — при компилировании исходного кода все java строки в файле из его исходной кодировки конвертируются в массивы байт, соответствующие Unicode строкам, поэтому конвертору (компилятору) нужно знать об исходной кодировке; вторая — при выводе текста в стандартный вывод Unicode строки конвертируются в массивы байт, представляющий строку в дефултной системной кодировке (которая, кстати, отличается от кодировки, которая используется стандартным выводом для отображения массива байт в символьные строки).
#333355130
Re[6]: Вопрос по кодировкам =(
От: Inco  
Дата: 24.01.06 10:12
Оценка:
Спасибо большое! =)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.