У меня такой тарбл....прога на джаве выводит в консоль 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)
Этим ты точно не добьёшься ничего, даже если 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
Вывод на консоль на русском языке обговорён в задании? Если он не нужен, а ты его для отладки используешь, то лучше пиши на английском, либо пиши в файл
Здравствуйте, Lucker, Вы писали:
L>Здравствуйте, Inco, Вы писали:
I>>Ага, смысл как раз в том, чтобы вывести строку на русском на консоль... L>пускай с пропертей -Dfile.encoding=cp866
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());
}
Компилируем. Платформа любая, дефултная кодировка не важно
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 строки конвертируются в массивы байт, представляющий строку в дефултной системной кодировке (которая, кстати, отличается от кодировки, которая используется стандартным выводом для отображения массива байт в символьные строки).