2013-08-10 3 views
2

영어 및 러시아어 텍스트를 사용자로부터 받아야하는 작은 응용 프로그램을 작성한 후 일부 처리를 수행합니다. 가능하면 String을 둘 다 사용하는 것을 선호합니다.Java - 러시아어 문자열 및 JTextField, String을 "???? ..."로 변경

내가 지금하고있는 방법은 스윙 라이브러리, 특히 JTextField를 사용하여 작성한 GUI가있는 것입니다.

영어 문자열의 경우에는 문제가 없습니다. 그러나 러시아 현악기는 계속 "???????"로 나오고 있습니다. 인코딩에 문제가있는 것처럼 느껴지지만 다른 일을해야한다는 것에 대한 모든 리소스를 찾지 못했습니다. 나는 CONSOL하는 JTextField.getText() 문자열의 인쇄하라는 메시지를 표시하고 TXT에 저장할 수 있어요 실제로 내 JFrame의 기반 GUI 내 JTextField를 추가하면

JLabel name_ru; 
JTextField name_russian; 

public Gui() 
{ 
    name_ru = new JLabel("Name in Russian:"); 
    name_russian = new JTextField(); 
} 

public void run() 
{ 
ru_name = name_russian.getText(); 
System.out.println(ru_name); 
} 

: 여기

코드입니다 BufferedWriter를 사용하여 파일을 만듭니다. JTextField의 텍스트가 영어 인 경우,이 작업을 수행 할 때 아무런 문제가 없습니다. 그러나, 러시아어 텍스트 (또는 다른 비 영어 텍스트)로 시도하자마자 출력이 "??????????"로 표시됩니다. 텍스트가 JTextField에 들어오는 방식은 GUI가 실행되면 사용자가 입력하는 방식이 간단합니다.

둘러 본 적이 있지만 여기에 게시 된 솔루션 (또는 찾을 수있는 곳) 중 아무 것도 JTextField 클래스를 다루지 않는 것으로 보입니다 .-getText()가 잘못 인코딩 된 문자열을 반환하는 것 같습니다. .. 그것을 바꿀 수있는 방법이 있습니까? 도움!

감사합니다. Eric.

+0

저장 한 파일 또는 출력 "consol"에 문제가 있습니까? 귀하의 질문은 현재 명확하지 않습니다. –

+0

죄송합니다. 내 답변이 있습니다. 문제는 콘솔 출력과 파일 출력 모두에있었습니다. 제가 UTF-8 출력을 허용하기 위해 일부 일식 설정이 누락 된 것으로 의심되기 때문에 출력했던 파일이 테스트였습니다. 두 가지 대답 모두 나를 해결할 수있었습니다. – Eric

+0

다음에 질문 할 때 좀 더 구체적으로 시도해보십시오. 우리는 당신의 코드와 문제에 대한 설명이 모호했습니다. 다음 번에 더 좋은 질문을 쓸 수 있도록 http://tinyurl.com/so-list를 읽으십시오. –

답변

3
System.out.println(ru_name); 

기본 콘솔 설정으로 UTF-8 (러시아어) 문자를 인쇄 할 수 없습니다. 그리고 따라서 그것은 인쇄 중입니다 ??? 문자들. 출력을 표시하는 데 사용하는 콘솔이 UTF-8로 인코딩되어 있는지 확인하십시오. 이클립스를 사용하는 경우

Run Configuration > Common -> Encoding으로 이동하고 드롭 다운 메뉴에서 UTF-8 양식을 선택하십시오.

enter image description here

+0

고마워, 그게 내가 찾고 있었던 바로 그거야! 나는 obviouse라고 믿을 수는 없지만 발견하는데 너무 오래 걸렸습니다 ... 다른 질문 하나 - 일단 컴파일하고 실행 가능한 JAR을 만들면 String이 실제로이 인코딩에 머물러 있는지 확인하려면 어떻게해야합니까? 또는 기본적으로 UTF-8로 유지됩니까? (나는 어딘가에있는 것을 읽었다 고 믿는다 ...) – Eric

+0

@Eric String reference는 UTF-8 문자를 올바르게 유지할 것이고, 문자열을 출력하는 곳이 UTF-8이 가능하도록해야한다. 예를 들어 콘솔에 대해 언급 한 경우, Jon이 대답에 언급 한 파일도 확인해야합니다. –

+0

@ Juned Ahsan, 고마워, 그게 내가 듣고 싶어하는거야! – Eric

4

이 거의 확실 하지 스윙을 가진 프로그램입니다. getText()은 보통의 Java String ()을 항상의 UTF-16 코드 단위로 반환합니다.

와 BufferedWriter의

이를 사용하여 txt 파일에 저장 아마 문제입니다. 내 생각 엔 FileWriter을 사용 중이거나 OutputStreamWriter을 플랫폼 기본 인코딩으로 사용하고있는 것 같습니다.

OutputStreamWriter (포장은 FileOutputStream)이지만 인코딩은 이상적으로는 UTF-8을 사용해야합니다. UTF-8은 유니 코드의 모든 문자를 나타낼 수 있습니다.

은 출력이 인 것을 말한 것이 아닙니다. 단지 "출력"이라고 말하는 것입니다. 메모장 등을 사용하여 파일을 보는 경우 인코딩을 지정해야 할 수도 있습니다.

+0

고마워, 내 질문의 다른 부분을 도왔습니다! 필자는 consoul이 비난 한 것으로 의심하기 때문에 내가 시도한 일이었다. 위의 대답과 결합하여 귀하의 방법으로 그것을 시도, 나는 파일뿐만 아니라 그것을 쓸 관리. 감사! :) – Eric