2010-05-20 3 views
2

나는, 이들 중 하나가 JTextArea에이 코드 지점을 통과 할 때 내가이 유니 코드 point.but의 또 다른 JTextArea에UTF-8 및 JTextArea에

쇼 문자 표현을 원하는이 \의 u0645 같은 유니 코드 코드 포인트를 포함하는 것을 2 JTextArea에이 그것은 표시

문자 포인트가 아닌 문자지만 내가 JTextArea setText 메서드에 코드 포인트를 직접 설정하면 올바르게 작동합니다!

왜? 그리고 하나의 JTextArea에서 다른 String으로 Codepoint의 String을 전달할 수 있습니까?

감사

+2

잘못된 결과를 얻을 때 정확히 한 JTextArea에서 다른 JTextArea로 텍스트를 전송합니까? – tangens

+1

또한 문제는 UTF-8과 관련하여 ** 아무것도 ** 없다는 점에 유의하십시오! –

답변

2

이 코드는 문자를 표시하고 다른 텍스트 영역에 해당 "유니 코드 문자열"대응 : 그래서

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


당신이있는 경우 이러한 문자의 긴 텍스트는 문자열을 통해 루프를 사용해야합니다 (을 사용).또는 getChars()) 각 문자를 String.format("\\%04x", (int) c.charValue());으로 처리하고 결과를 대상 문자열에 추가하십시오. , DIR을

+0

안녕하세요, 예를 들어 String of Codepoint가 있습니다. "\ u0645 \ u0645"해결책과 함께 작동하지 않습니다. –

+0

그런 다음 'getCharAt' 또는 getChars를 사용하여 문자열을 반복합니다. – aioobe

0
JTextArea text=new JTextArea(); 

String dir=text.getText(); 

JTextArea text2=new JTextArea(); 

text2.setText(dir); 

을 (가급적. StringBuffer 사용)하지만이 작동하지 않는 내가 직접 가

의 setText는 ("\ u0645의 \의 u0645") 그것의

에 코드 포인트의 문자열을 전달 코드 points.if의 문자열을 포함 작동!

+0

업데이트 된 답변보기 – aioobe

+0

그건 답이 아닌 질문에 대한 편집으로 더 적합 할 것입니다! –

0

코드 포인트를 JTextArea setText 메소드에 직접 설정하면 올바르게 작동합니다! 당신이 myTextArea.setText('\u0645') 같은 뜻이에 의한 경우

는 다음 문제는 오히려 분명하다

자바 컴파일러 해석 \uunicode escape의 시작으로. 즉, 은 Java 소스 코드에있는 문자 \u0645은 실제로 동일한 위치에 문자 م (유니 코드 문자 U+0645 ARABIC LETTER MEEM)을 넣는 것과 완전히 동일합니다. 때문에\u0645이 대응하는 유니 코드 문자로 설정되어 컴파일시에

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

그 이유는 다음과 같습니다

그래서 다음 두 줄은 정확히 같은 일을.

6자를 포함하는 Java String이있는 경우 완전히 다른 상황입니다. \u0645. 이 문자열은 Java 문자열 리터럴 "\\u0645"으로 나타낼 수 있습니다 (컴파일러가 유니 코드 이스케이프를 해석하지 않도록 이중 백 슬래시에 유의하십시오).마지막 문자 ("\\u0645".subString(2))로 세 번째를 잡을 수있는 경우

은 ( Integer.parseInt(theString, 16) 포함) 16 진수로 그것을 분석하고 char에 결과를 캐스팅. 그런 다음 실제 유니 코드 문자가 포함 된 char 값을 갖게됩니다.