开发者

UTF-8 and JTextArea

i have 2 JTextArea that one of these contain Unicode Code point like this \u0645 i want another JTextArea 开发者_如何转开发

show Character representation of this Unicode code point.but when pass this code point to JTextArea , it show

code point not Character but if i set code point to JTextArea setText method directly it work correctly !

why ? and which can i pass String of Codepoint from one JTextArea to another ?

thanks


This code displays a character, and in the other text-area the corresponding "unicode string" counterpart:

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);
    }
}

UTF-8 and JTextArea


So if you have a long text of such characters, you would need to loop through the string character by character, (using getCharAt(int) or getChars()) and process each character with String.format("\\%04x", (int) c.charValue()); and append the result to the target string. (Preferrably using a StringBuffer.)


JTextArea text=new JTextArea();

String dir=text.getText();

JTextArea text2=new  JTextArea();

text2.setText(dir);

but this don't work, dir contain string of code points.if i pass String of codepoint directly to

setText("\u0645\u0645") it's work !


If i set code point to JTextArea setText method directly it work correctly !

If by this you mean something like myTextArea.setText('\u0645'), then the issue is rather clear:

The Java compiler interprets \u as the beginning of a unicode escape. That means that anyhwere in Java source code the characters \u0645 are completely equivalent to actually putting the character م (Unicode character U+0645 ARABIC LETTER MEEM) at that same place.

So the following two lines do exactly the same thing:

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

The reason for this is, because at compile time \u0645 is turned into the corresponding Unicode character.

It's an entirely different situation if you have the Java String that contains the 6 characters \u0645. That String can be represented as the Java String literal "\\u0645" (note the double-backslash to avoid the compiler interpreting the Unicode escape).

In that case you can grab the third to last character ("\\u0645".subString(2)), parse that as a hexadecimal number (with Integer.parseInt(theString, 16)) and cast the result to char. Then you'll have a char value containing the actual Unicode character.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜