2015-01-16 1 views
0

나는 단순해야 문제가 있어요. 나는 근본적인 무언가를 놓치고 있어야합니다. 나는 String viz를 만든다.텍스트의 텍스트에서 지정된 텍스트가 아닌

String text = "\u0391\u039A\u03C1\u1F83\uA978\u0370\u03D8\u03C0"; 

내가 원하는만큼 기본 글꼴와의 JLabel의 인수로, 그것은 그리스어 문자를 인쇄하는 것을 사용하는 경우.

그러나 텍스트 파일에 동일한 문자열 (물론 따옴표없이)을 입력하고 해당 줄을 읽고 JLabel에 줄을 지정하면 "해석되지 않은"문자열이 나타납니다. 파일에있는 것처럼 보입니다. 다른 인코딩을 사용하여 ISO-8859-1, UTF-8, UTF-16 등과 같은 파일을 읽지 않으려 고 노력했습니다.

어떻게 텍스트를 할당 된 텍스트처럼 읽게 할 수 있습니까? testReadLabel.txt 위의 텍스트가 포함 된 경우

String text = "\u0391\u039A\u03C1\u1F83\uA978\u0370\u03D8\u03C0"; 
System.out.println("As ascii text = " + text); 

String label = new String(readLabel(directory + File.separator 
+ "testReadLabel.txt")); 
System.out.println("As ascii label = " + label); 

시도하고 읽기는 표준

BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(fileName), "ISO-8859-1")); 

return br.readLine(); 
+2

Java 문자열 리터럴 이스케이프를 파일에 넣는 이유는 무엇입니까? 실제 문자를 넣어야합니다. – SLaks

답변

1

입니다 당신이해야 언 이스케이프 문자열 최초의 후 당신은 파일에서 그것을 읽었습니다. 예 : 이 작업을 수행 할 Apache Commons에서 StringEscapeUtils를 사용

String label = StringEscapeUtils.unescapeJava(stringFromFile); 
0

백 슬래시 이스케이프 코드는 컴파일러에 의해 문자열 리터럴로 변환됩니다. 파일 IO에서 변환되지 않습니다. 이스케이프 코드를 파싱하려면 코드를 직접 작성하거나 라이브러리를 사용하여 코드를 작성해야합니다.

+0

알았습니다! 파일에서 실제 유니 코드 바이트를 읽지 않고 컴파일러가 번역 할 때 그리스 문자를 생성하는 이스케이프 코드가있는 ASCII 텍스트를 읽었습니다. 원본 텍스트를 유니 코드로 작성했다면 다시 읽어야하고 같은 방식으로 인쇄해야했지만 원래 리터럴처럼 보이는 파일에서는 "볼"수 없었습니다. 그것은 유니 코드를 나타내는 일련의 바이트 였을 것입니다. –

관련 문제