Program Tip

유니 코드 문자의 코드를 어떻게 얻을 수 있습니까?

programtip 2020. 11. 23. 19:54
반응형

유니 코드 문자의 코드를 어떻게 얻을 수 있습니까?


내가 이것을 가지고 있다고 가정 해 봅시다.

char registered = '®';

또는 umlaut, 또는 모든 유니 코드 문자. 코드를 어떻게 얻을 수 있습니까?


다음으로 변환하십시오 int.

char registered = '®';
int code = (int) registered;

실제로에서 로의 암시 적 변환 charint있으므로 위에서 수행 한 것처럼 명시 적으로 지정할 필요는 없지만이 경우에는 수행하려는 작업을 분명히하기 위해 그렇게 할 것입니다.

이렇게하면 기본 다국어 평면에 정의 된 모든 문자에 대한 유니 코드 코드 포인트와 동일한 UTF-16 코드 단위가 제공됩니다. (그리고 charJava 에서는 BMP 문자 만 으로 표현할 수 있습니다 .) Andrzej Doyle의 대답에 따르면 임의의 문자열에서 유니 코드 코드 포인트를 원하면 Character.codePointAt().

UTF-16 코드 단위 또는 유니 코드 코드 포인트가 있지만 그 중 정수인 경우이를 사용하여 수행하는 작업은 사용자에게 달려 있습니다. 문자열 표현을 원하면 원하는 표현의 종류정확히 결정해야합니다 . (예를 들어, 값이 항상 BMP에 있다는 것을 알고 있다면 U+, 예 "U+0020"들어 공백에 대해 접두사가 붙은 고정 된 4 자리 16 진수 표현을 원할 수 있습니다 .)하지만 우리가 무엇을 알지 못하기 때문에이 질문의 범위를 벗어납니다. 요구 사항입니다.


이 작업을 수행하는 더 완벽하고 장황한 방법은 Character.codePointAt 메서드 를 사용하는 것입니다. 이것은 a char가 나타낼 수 있는 범위 내에서 단일 정수로 나타낼 수없는 '상위 대리'문자를 처리 합니다.

예제에서 이것이 꼭 필요한 것은 아닙니다. (유니 코드) 문자가 단일 (Java) char(예 : registered지역 변수)에 들어갈 수있는 경우 해당 문자는 \u0000to \uffff범위 내에 있어야하며 그럴 필요가 없습니다. 대리 쌍에 대해 걱정하십시오. 그러나 String / char 배열 내에서 잠재적으로 더 높은 코드 포인트를보고있는 경우에는이 메서드를 호출하여 가장자리 사례를 처리하는 것이 좋습니다.

예를 들어, 대신

String input = ...;
char fifthChar = input.charAt(4);
int codePoint = (int)fifthChar;

사용하다

String input = ...;
int codePoint = Character.codePointAt(input, 4);

이 인스턴스에서이 코드는 약간 적을뿐만 아니라 대리 쌍 감지를 처리합니다.


Java에서 char는 기술적으로 "16 비트 정수"이므로 간단히 int로 캐스트하면 코드를 얻을 수 있습니다. 에서 오라클 :

char 데이터 유형은 단일 16 비트 유니 코드 문자입니다. 최소값은 '\ u0000'(또는 0)이고 최대 값은 '\ uffff'(또는 65,535 포함)입니다.

따라서 간단히 int로 캐스트 할 수 있습니다.

char registered = '®';
System.out.println(String.format("This is an int-code: %d", (int) registered));
System.out.println(String.format("And this is an hexa code: %x", (int) registered));

친애하는 친구, Jon Skeet은 문자 Decimal 코드를 찾을 수 있지만 유니 코드에서 언급해야하는 문자 Hex 코드가 아니므로 Deciaml이 아닌 HexCode를 통해 문자 코드를 표현해야합니다.

http://unicode.codeplex.com 에는 캐릭터 또는 센 테스에 대한 완전한 정보를 제공 하는 오픈 소스 도구가 있습니다 .

따라서 char를 매개 변수로 제공하고 ahexCode를 문자열로 반환하는 파서를 만드는 것이 좋습니다.

public static String GetHexCode(char character)
    {
        return String.format("{0:X4}", GetDecimal(character));
    }//end

도움이 되길 바랍니다


나를 위해 "Integer.toHexString (registered)"만 내가 원하는 방식으로 작동했습니다.

char registered = '®';
System.out.println("Answer:"+Integer.toHexString(registered));

이 답변은 일반적으로 표에 표시된 문자열 표현 만 제공합니다. Jon Skeet의 답변은 더 많은 것을 설명합니다.


유틸리티 클래스 StringUnicodeEncoderDecoder가있는 오픈 소스 라이브러리 MgntUtils가 있습니다. 이 클래스는 모든 문자열을 유니 코드 시퀀스로 변환하는 정적 메서드를 제공합니다. 매우 간단하고 유용합니다. 문자열을 변환하려면 다음을 수행하십시오.

String codes = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(myString);

예를 들어 문자열 "Hello World"는 다음으로 변환됩니다.

"\ u0048 \ u0065 \ u006c \ u006c \ u006f \ u0020 \ u0057 \ u006f \ u0072 \ u006c \ u0064"

It works with any language. Here is the link to the article that explains all te ditails about the library: MgntUtils. Look for the subtitle "String Unicode converter". The article gives you link to Maven Central where you can get artifacts and github where you can get the project itself. The library comes with well written javadoc and source code.

참고URL : https://stackoverflow.com/questions/2006533/how-can-i-get-a-unicode-characters-code

반응형