Java로 유니 코드 문자를 표시하고 싶습니다. 이렇게하면 잘 작동합니다.
String symbol = "\u2202";
기호는 “∂”와 같습니다. 그게 내가 원하는 것입니다.
문제는 내가 유니 코드 번호를 알고 있고 그로부터 유니 코드 기호를 만들어야한다는 것입니다. 나는 명백한 것을 시도했다.
int c = 2202;
String symbol = "\\u" + c;
그러나이 경우 symbol은 “\ u2202″와 같습니다. 그것은 내가 원하는 것이 아닙니다.
유니 코드 번호를 알고 있다면 어떻게 심볼을 구성 할 수 있습니까 (하지만 런타임에만 —- 첫 번째 예제처럼 하드 코딩 할 수 없습니다)?
답변
그냥 캐스팅 int
A를 char
. 다음을 String
사용하여 변환 할 수 있습니다 Character.toString()
.
String s = Character.toString((char)c);
편집하다:
Java 소스 코드 ( \u
비트) 의 이스케이프 시퀀스는 HEX로되어 있으므로 이스케이프 시퀀스를 재현하려면 int c = 0x2202
.
답변
UTF-16으로 인코딩 된 코드 단위를로 가져 오려면 char
정수를 구문 분석하고 다른 사람이 제안한대로 캐스트 할 수 있습니다.
모든 코드 포인트를 지원하려면 Character.toChars(int)
. 이것은 코드 포인트가 단일 항목에 맞지 않는 경우를 처리합니다.char
값에 합니다.
Doc 말한다 :
지정된 문자 (유니 코드 코드 포인트)를 char 배열에 저장된 UTF-16 표현으로 변환합니다. 지정된 코드 포인트가 BMP (Basic Multilingual Plane 또는 Plane 0) 값인 경우 결과 char 배열은 codePoint와 동일한 값을 갖습니다. 지정된 코드 포인트가 보조 코드 포인트 인 경우 결과 char 배열에는 해당하는 서로 게이트 쌍이 있습니다.
답변
여기의 다른 답변은 U + FFFF (하나의 char 인스턴스를 다루는 답변)까지의 유니 코드 만 지원하거나 실제 기호 (Character.toChars ()에서 멈추는 답변 또는 잘못된 방법 사용)를 얻는 방법을 알려주지 않습니다. 그 후), 여기에 내 대답도 추가하십시오.
추가 코드 포인트도 지원하려면 다음을 수행해야합니다.
// this character:
// http://www.isthisthingon.org/unicode/index.php?page=1F&subpage=4&glyph=1F495
// using code points here, not U+n notation
// for equivalence with U+n, below would be 0xnnnn
int codePoint = 128149;
// converting to char[] pair
char[] charPair = Character.toChars(codePoint);
// and to String, containing the character we want
String symbol = new String(charPair);
// we now have str with the desired character as the first item
// confirm that we indeed have character with code point 128149
System.out.println("First code point: " + symbol.codePointAt(0));
또한 어떤 변환 방법이 작동하고 작동하지 않는지에 대한 빠른 테스트를 수행했습니다.
int codePoint = 128149;
char[] charPair = Character.toChars(codePoint);
String str = new String(charPair, 0, 2);
System.out.println("First code point: " + str.codePointAt(0)); // 128149, worked
String str2 = charPair.toString();
System.out.println("Second code point: " + str2.codePointAt(0)); // 91, didn't work
String str3 = new String(charPair);
System.out.println("Third code point: " + str3.codePointAt(0)); // 128149, worked
String str4 = String.valueOf(codePoint);
System.out.println("Fourth code point: " + str4.codePointAt(0)); // 49, didn't work
String str5 = new String(new int[] {codePoint}, 0, 1);
System.out.println("Fifth code point: " + str5.codePointAt(0)); // 128149, worked
답변
그 기억 char
일체형이며, 따라서 정수 값뿐만 아니라 문자 상수를들 수있다.
char c = 0x2202;//aka 8706 in decimal. \u codepoints are in hex.
String s = String.valueOf(c);
답변
이것은 나를 위해 잘 작동했습니다.
String cc2 = "2202";
String text2 = String.valueOf(Character.toChars(Integer.parseInt(cc2, 16)));
이제 text2는 ∂를 가질 것입니다.
답변
String st="2202";
int cp=Integer.parseInt(st,16);// it convert st into hex number.
char c[]=Character.toChars(cp);
System.out.println(c);// its display the character corresponding to '\u2202'.
답변
방법은 다음과 같습니다.
int cc = 0x2202;
char ccc = (char) Integer.parseInt(String.valueOf(cc), 16);
final String text = String.valueOf(ccc);
이 솔루션 은 Arne Vajhøj입니다.