BERDAFLEX Software Systems
Главная > Java > Перекодировка в юникод

Перекодировка в юникод

История переиздания
Издание 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 конвертер

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) .Пакет архива содержит исходные коды и исполняемые классы.

Rambler's Top100 Рейтинг@Mail.ru