반응형
java.lang.Character
- JDK 1.4 : Character information is based on the Unicode Standard, version 3.0.
- JDK 5.0 : Character information is based on the Unicode Standard, version 4.0.
Java에서 char 은 16bit 고정 길이를 가지도록 되어 있다.
하지만 unicode 의 값 중에는 U+0000 ~ U+FFFF 를 넘어서는 값도 있기 때문에 이에 대한 처리가 문제가 된다.
1
JDK 1.4의 api document 중에서 Character 에 관한 문서를 확인해 보고
( http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Character.html )
JDK 5.0의 api document 중에서 Character 에 관한 문서를 확인해 보면 서로 틀린것을 알 수 있다.
( http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Character.html )
JDK 5.0에서는 Unicode Character Representations 항목이 추가 된 것을 알 수 있다.
- 유니코드의 표준이 16비트 이상도 표현하도록 변경되었다.
- 현재는 U+0000 부터 U+10FFFF 까지 정의되어 있다.
- U+0000 부터 U+FFFF 까지는 Basic Multiingual Plane(BMP)를 참고한다.
- U+FFFF 보다 큰것들은 supplementary cahcaters가 있어야 한다.
- Java 2 에서는 UTF-16을 사용한다.
- supplementary chacters는 char 두개로 이루어 진다.
- 첫번째 char은 U+D800 ~ UDBFF를 , 두번째 char은 U+DC00~U+DFFF 까지의 범위를 가진다.
- char은 BMP나 UTF-16인코딩만을 가리킬 수 있다.
- 그러므로 char를 사용하는 메소드를 쓸때에는, supplementary char에 대해서는 메소드를 호출 하면 잘못된 값이 나올 수 있다.
- 예) Character.isLetter('\uD840') 를 사용하면 false로 return 된다.
- int는 supplementary code point 도 가리킬 수 있다.
- 하위 21bit 는 Unicode값을 가리키고, 상위 11비트는 항상 0로 채워져 있다.
- 21bit인 이유는 현재 Unicode 가 U+10FFFF 까지 가리킬 수 있기 때문이다. ( U+10FFFF를 2진수로 변경하면 총 21bit 만을 차지하게 된다. )
- 그러므로 int를 사용하는 char 관련 메소드를 사용할때에는 supplementary char에 대해서는 제대로 된 응답이 반환된다.
- 예) Character.isLetter(0x2F81A) 를 사용하면 true로 return 된다.
반응형
'공부 > 컴퓨터' 카테고리의 다른 글
[책읽기] 뉴욕의 프로그래머 - 임백준. (0) | 2007.12.16 |
---|---|
웹 서비스 - 대략적인 정리 (0) | 2007.08.06 |
File클래스의 setLastModifiedTime 에 관한 정보 (2) | 2007.07.06 |
.class file format 과 overriding에 관한 참고 사항 (0) | 2007.06.18 |
[Java] ArrayList의 removeAll과 HashMap의 remove 비교. (10) | 2007.06.09 |