Здравствуйте, Илья К., Вы писали:
ИК>Здравствуйте, 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 не возникает). Всё равно не читается. Это всё наталкивает на мысль, что должен быть ещё метод какойто для получения большего списка кодировок.