UTF-8 и JTextArea - PullRequest
       1

UTF-8 и JTextArea

3 голосов
/ 20 мая 2010

У меня есть 2 JTextArea, одна из которых содержит точку кода Unicode, как эта \ u0645 Я хочу другую JTextArea

покажите символьное представление этого кода точки Unicode. Но когда эта точка кода передается в JTextArea, она показывает

кодовая точка не символьная, но если я непосредственно установлю кодовую точку для метода setText JTextArea, он будет работать правильно!

почему? и что я могу передать строку кода из одной JTextArea в другую?

спасибо

Ответы [ 3 ]

2 голосов
/ 20 мая 2010

Этот код отображает символ, а в другой текстовой области соответствующий аналог "строки Unicode":

import java.awt.*;

import javax.swing.*;
public class FrameTest {
    public static void main(String[] args) {
        JFrame jf = new JFrame("Demo");
        Container cp = jf.getContentPane();
        cp.setLayout(new BorderLayout());
        JTextArea ta1 = new JTextArea(20, 20);
        JTextArea ta2 = new JTextArea(20, 20);
        Character c = '\u0645';
        ta1.setText("" + c);
        String s = String.format("\\%04x", (int) c.charValue());
        ta2.setText(s);
        cp.add(ta1, BorderLayout.WEST);
        cp.add(ta2, BorderLayout.EAST);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setSize(500, 100);
        jf.setVisible(true);
    }
}

enter image description here


Таким образом, если у вас длинный текст таких символов, вам необходимо перебрать строковый символ за символом (используя getCharAt(int) или getChars()) и обработать каждый символ с помощью String.format("\\%04x", (int) c.charValue()); и добавьте результат к целевой строке. (Предпочтительно с использованием StringBuffer.)

0 голосов
/ 20 мая 2010

Если я напрямую установлю кодовую точку для метода setText JTextArea, он будет работать правильно!

Если под этим вы подразумеваете что-то вроде myTextArea.setText('\u0645'), то проблема довольно ясна:

Java-компилятор интерпретирует \u как начало экранирования Unicode . Это означает, что anyhwere в исходном коде Java символы \u0645 полностью эквивалентны фактическому размещению символа م (Unicode-символ U + 0645 ARABIC LETTER MEEM ) в том же месте .

Итак, следующие две строки делают одно и то же:

myTextArea.setText('\u0645')
myTextArea.setText('م')

Причина этого в том, что во время компиляции \u0645 превращается в соответствующий символ Unicode.

Это совершенно другая ситуация, если у вас есть строка Java, содержащая 6 символов \u0645. Эта строка может быть представлена ​​как литерал Java String "\\u0645" (обратите внимание на двойной обратный слеш, чтобы компилятор не интерпретировал escape-код Unicode).

В этом случае вы можете взять третий с последнего символа ("\\u0645".subString(2)), проанализировать его как шестнадцатеричное число (с Integer.parseInt(theString, 16)) и привести результат к char. Тогда у вас будет char значение, содержащее фактический символ Unicode.

0 голосов
/ 20 мая 2010
JTextArea text=new JTextArea();

String dir=text.getText();

JTextArea text2=new  JTextArea();

text2.setText(dir);

но это не работает, каталог содержит строку кодовых точек. Если я передаю строку кодовой точки непосредственно в

setText ("\ u0645 \ u0645"), это работает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...