Java

         

В случае отсутствия нужной кодировки,


  • Использовать вместо System.out.println свой класс, а уже в нём делать преобразование. Например:


  • public class Msg { static String cp = System.getProperty("console.encoding","Cp866"); public static void message(String msg) { msg += "\n"; byte[] b; try { b = msg.getBytes(cp); } catch( UnsupportedEncodingException e ) { b = msg.getBytes(); // В случае отсутствия нужной кодировки, // делаем преобразование по умолчанию } System.out.write(b); } } ... Msg.message("Сообщение");

  • Написать свою версию PrintStream, поддерживающую нужную кодировку, и подставить его через System.setOut() и System.setErr(). Вот, например, обычное начало в моих программах:


  • ... public static void main(String[] args) { // Установка вывода консольных сообщений в нужной кодировке try { System.setOut(new CodepagePrintStream(System.out,System.getProperty("console.encoding","Cp866")) ); } catch(UnsupportedEncodingException e) { System.out.println("Unable to setup console codepage: " + e); } ...

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


    1. Читать и записывать массивы байтов (byte[]), а для перекодировки использовать упомянутые методы класса String. Этот способ особенно удобен, когда в потоке могут присутствовать данные в разных кодировках.


    2. Использовать классы InputStreamReader и OutputStreamWriter из пакета java.io, специально предназначенные для этих целей.


    3. Сделать преобразование в нужную кодировку. Если вы всё сделаете корректно, то данные не потеряются, хотя, конечно, пользоваться этим желательно только в крайнем случае. Пример:


    4. // Чтение русских букв в кодировке Cp866 через объект, // поддерживающий только Cp437 String str = o.readString(); str = new String(str.getBytes("Cp437"),"Cp866"); // Сохранение русских букв в кодировке Cp866 через объект, // поддерживающий только Cp437 str = new String(str.getBytes("Cp866"),"Cp437"); o.writeString(str);



    Содержание  Назад  Вперед







    Forekc.ru
    Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий