История переиздания | ||
---|---|---|
Издание 1.0 | Август 2004 г. |
Перед большинством java-программистов рано или поздно встает проблема локализации созданных продуктов. И, несмотря на то, что методика локализации достаточно хорошо описана, например можно обратиться к руководству по адресу http://java.sun.com/docs/books/tutorial/i18n/index.html, существует проблема непосредственно перекодировки строк в юникод.
Чтобы упростить эту операцию была создана простая утилита, которая выполняет перекодировку и позволяет копировать полученные строки в буфер обмена. Основой алгоритма перекодировки стал метод:
static public String charToHex(char c) {
// Returns hex String representation of char c
byte hi = (byte) (c >>> 8);
byte lo = (byte) (c & 0xff);
return byteToHex(hi) + byteToHex(lo);
}
класса: http://java.sun.com/docs/books/tutorial/i18n/text/example-1dot1/UnicodeFormatter.java. Программа представляет собой разбитую на две части панель (см. Рис. 1).
Рисунок 1. Unicode конвертер
В верхней панели вводим текст, который требуется перекодировать, при этом в нижней панели сразу получим его аналог в юникоде. Для удобства копирования добавлены обработчики контекстного меню, которые вызываются при помощи мыши.
Для обработки нажатия клавиш к контейнеру-источнику добавлены слушатели нажатия и отпускания клавиш, которые вызывают метод перекодировки:
. . .
//Слушатели нажатия и отпускания клавиш
srcText.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(KeyEvent e) {
srcText_keyReleased(e);
}
public void keyTyped(KeyEvent e) {
srcText_keyTyped(e);
}
});
private void srcText_keyReleased(KeyEvent e) {
convertToUnicode();
}
private void srcText_keyTyped(KeyEvent e) {
convertToUnicode();
}
private void convertToUnicode() {
String source = srcText.getText();
char[] ca = source.toCharArray();
targetText.setText(convertChars(ca));
}
//Непосредственно перекодировка
public String convertChars(char[] array) {
StringBuffer s = new StringBuffer();
for (int k = 0; k < array.length; k++) {
byte hi = (byte) (array[k] >>> 8);
if (hi != 0) {
s.append("\\u" + UnicodeFormatter.charToHex(array[k]));
} else {
s.append(array[k]);
}
}
return s.toString();
}
. . .
Скачать данную программу txt2uni.zip (10k) .Пакет архива содержит исходные коды и исполняемые классы.