2017-09-21 3 views
-5

이 질문과 대답은 여기를 참조하십시오 : Java: Convert String “\uFFFF” into char. 이 질문은 필자가 요구하는 것과 매우 비슷하지만 내 요구 사항에 대답하지 않습니다.Java : UTF 표현의 문자열을 단일 UTF Char로 변환 하시겠습니까?

문자열이 String ori = new String("\"" + "\u" + n + "\"");에 의해 형성되는 경우 어떻게됩니까? 여기서 n은 Integer.toString (i)에 의해 형성된 문자열입니다. 여기서 i는 int입니까? 이 문자열 변수 ori을 어떻게 유니 코드 문자로 변환 할 수 있습니까? 이 경우 String n = Integer.toString(i); n = "0000".substring(n.length()) + n;

, 그 응답이 변조 방법은 다음과 같이

내지 N 행 I 체인은 무엇입니까? 예를 들어, char c = "\uFFFF".toCharArray()[0];?

확인했습니다. 위의 코드는 다음으로 대체 할 수 없습니다 : char c = ori.toCharArray()[0]; 변환이 프로그램 내에 있기 때문에 다음과 같이 값을 하드 코딩하십시오. char c = '\uFFFF';은 내 코드에서 사용할 수 없습니다.

Character and Byte Streams 및 예제 프로그램 StreamConverter.java을 살펴볼 수 있습니다. "\ u65e5 \ u672c \ u8a9e \ u6587 \ u5b57 \ u5217"스트림을 내 항목 (예 : "\ u005a")으로 바꾸면 콘솔 및 GUI에 모두 문자 Z가 표시됩니다.

또한 프로그램과 stringConverter.java을 확인하십시오. 여기에서 각각의 6 요소 정수 문자열은 UTF 문자로 대체됩니다.

하지만 왜 코드가 작동하지만 내 것은 아닙니까?!

+1

기존 질문을 참조하는 새 질문을 게시하고 기존 질문에 대한 대답으로 문제가 해결되지 않는 이유를 간단히 설명하십시오. – dpr

+0

* 왜 *는 "String ori"가 그런 식으로 형성 되었습니까? 귀하의 요구 사항은 무엇입니까? '\ unnnn'은 런타임이 아닌 컴파일러의 표기법입니다. 런타임시 16 진수가 아닌 실제 문자 코드를 갖게됩니다. – EJP

+0

임의의 코드를 사용할 때마다 매번 변수 i는 새로운 n을 생성하므로 유니 코드 값의 새 문자열을 만듭니다. 그래서 문자열을 유니 코드 문자로 변환해야합니다. "\ u0056"과 "0x0056"과 같은 두 가지 형식을 형성 할 수 있지만 그 이상은 없습니다! – Rajibando

답변

0

두 가지 이유로 String ori을 작성할 수 없습니다. 첫째, 유니 코드 이스케이프 시퀀스는 16 진수에 있고, 당신이 int를 추가 할 때 그것은 당신에게 육각/유니 코드 표현이있는 문자열을 줄 것이다

String ori = String.format("\\u%04x", i); 

베이스 (10)이다. 예를 들어 i이 47이면 ori = "\u002f"입니다. 이제 당신이 나타내는 성격을 얻고 싶다면. 당신은 정수 값을 파싱해야합니다. 이 값은 i과 동일하지만 i 만 사용하십시오.

char c = (char)i; 

이제 모든 도구가 제공됩니다.

for(int i = 'A'; i<='Z'; i++){ 
    System.out.println(String.format("\\u%04x is the character: %s", i, (char)i)); 
} 

예를 들어 각 문자가 인쇄됩니다.

\u0051 is the character: Q 

표현을 고려하십시오.

String one = "\u0041"; 

해당 문자열은 한 문자 ('A')로 된 문자열입니다. 그런 다음이 문자열을 고려하십시오.

String two = "\\u0041"; 

이는 6 자의 문자열입니다. 이와 같은 문자열이 있으면 문자열에서 숫자를 가져 와서 문자를 만들 수 있습니다.

char c = (char)Integer.parseInt(two.substring(2), 16); 

예를 들면.

String two = "\\u00B6"; 
    char c = (char)(Integer.parseInt(two.substring(2), 16)); 
    System.out.println(two + " is the code for " + c); 
    #\u00B6 is the code for ¶ 
+0

Matt, A는 UTF-8 : 0x41 또는 UTF-16 : 0x0041이고 Z는 UTF-8 : 0x5A 또는 UTF-16 : 0x005A입니다. 그래서 유니 코드 형식 인 "0x005A"또는 "0x5A"와 같은 문자열을 만듭니다. 그러나 위트는 문자열 형식을 단일 문자로 읽도록 변환합니다. oracle에서 예제 프로그램을 확인할 수 있습니다. 문자열을 "\ u005A"한 문자열로 대체하고 GUI와 콘솔에서 원하는 출력을 얻을 수 있습니다. – Rajibando

+0

고마워, 매트! 하지만 Matt, Oracle Java 코드 스트림 변환기를 보면, 내가 바꾼 확실한 선이 있습니다 : String str = new String ("\ u005A"); 예를 들어 필요한 출력을 얻습니다 .¶ 프로그래밍 방식으로 유니 코드 값을 살펴볼 필요가 없습니다. 리눅스를 사용하고 값을 찾기 위해 kcharselect를 사용합니다 .¶ ¶ 단락/줄 바꿈을 표시합니다. – Rajibando

+0

입력 내용은 무엇이며, 어떻게해야합니까? 출력을 원한다. 'String str = new String ("\ u005A");'유니 코드 문자열을 가지고 있는데 그것을 문자로 바꾸고 싶습니까? 즉'String str = "\\ u005A"; 또는 유니 코드 문자가 있습니까? 'String str = "\ u005A". – matt