[java] 번호에서 유니 코드 문자 만들기

Java로 유니 코드 문자를 표시하고 싶습니다. 이렇게하면 잘 작동합니다.

String symbol = "\u2202";

기호는 “∂”와 같습니다. 그게 내가 원하는 것입니다.

문제는 내가 유니 코드 번호를 알고 있고 그로부터 유니 코드 기호를 만들어야한다는 것입니다. 나는 명백한 것을 시도했다.

int c = 2202;
String symbol =  "\\u" + c;

그러나이 경우 symbol은 “\ u2202″와 같습니다. 그것은 내가 원하는 것이 아닙니다.

유니 코드 번호를 알고 있다면 어떻게 심볼을 구성 할 수 있습니까 (하지만 런타임에만 —- 첫 번째 예제처럼 하드 코딩 할 수 없습니다)?



답변

그냥 캐스팅 intA를 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입니다.