Re[2]: Кодировки
От: Lunik Россия  
Дата: 04.08.03 17:47
Оценка:
Здравствуйте, Илья К., Вы писали:

ИК>Здравствуйте, Lunik, Вы писали:


L>>Держит ли ява различные кодировки? У меня JTextPane, но ява unicode держит, а вот как насчёт cp? досовые, например тексты в cp. кто знает, подскажите.


ИК>java держит тучу кодировок (см. jre/lib/charsets.jar)


ИК>использовать их можно по разному, например, так:


ИК>String XXX = "сообщение";

ИК>return new String(XXX.getBytes("CP866")); // вернет XXX в кодировке DOS

Я вот полазил там и написал:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.nio.charset.Charset;
import java.util.*;
import javax.swing.event.*;

public class Charsets extends JFrame{
   JList list = new JList();
   static SortedMap sm;
   JTextPane text;
   String firstSource;


   public Charsets() {
       Container cp = getContentPane();

      sm = Charset.availableCharsets();

      text = new JTextPane();
      text.setText("__'_" ("_'Rў п ЄR¤ЁаRўЄ ) \n" + "АБВГД (ВИНДОВСовая кодировка)");
      text.addKeyListener(new KeyListener() {
                   public void keyTyped(KeyEvent e) {}
                  public void keyPressed(KeyEvent e) {}
                     public void keyReleased(KeyEvent e){
                       firstSource = new String(text.getText());
                   }             
      });
      cp.add(text, BorderLayout.CENTER);
         firstSource = new String(text.getText());

         Object[] o = sm.keySet().toArray();
         o[o.length - 1] = (Object)(new String("CP866"));//Вместо x-windows-950

        list.setListData(o);
        list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        list.addListSelectionListener(new AListSelectionListener());
        cp.add(new JScrollPane(list), BorderLayout.WEST);
   }
  
    class AListSelectionListener implements ListSelectionListener {
    public void valueChanged(ListSelectionEvent e) {
     try{
        if (e.getValueIsAdjusting())
            return;

        JList theList = (JList)e.getSource();
        if (!theList.isSelectionEmpty()) {
                  text.setText( new String( firstSource.getBytes( theList.getSelectedValue().toString() ) ) );
                  System.out.println("Selected encoding " + theList.getSelectedValue().toString());
        }
    
    }catch(Exception ex) {
        ex.printStackTrace();
      System.exit(0);
    }
    }    
    }

    public static void main(String[] args) {
        Charsets window = new Charsets();
        window.pack();
        window.setVisible(true);


    System.out.println("Key set: ");
    System.out.println(sm.keySet().toArray()[0]);
    System.out.println("Values: ");
    System.out.println(sm.values());
    }
}


В строке присвоения текста там две строки -- одна — досовой кодировки, другая там написано. это я делал в FAR, там можно динамически менять кодировку ДОС-ВИН. и вот в полученном наборе кодировок нема такой , при которой бы читалось нормально досовая строка (там написано "АБВГД (ДОСовая кодировка)"). добавляю "CP866" (кстати, в списке её нету, но при попытке её использования исключения UnsupportedEncoding не возникает). Всё равно не читается. Это всё наталкивает на мысль, что должен быть ещё метод какойто для получения большего списка кодировок.
---
Lunik
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.