복잡한 유니코드의 세계 (개발일반)
2021-04-01 17:25 - swindler
최근에 작업을 하다 이상한 코드를 발견함
찾아보니 하나는
MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL, 하나는
MATHEMATICAL SANS-SERIF ITALIC CAPITAL
replaceAll("\uD835\uDE64", "o");
이렇게 하면 첫번째 케이스의 소문자 o를 변환할수는 있음
소문자 코드셋은
replaceAll("[\uD835\uDE56-\uD835\uDE6F]", "-");
두번째 케이스의 대문자 O는
replaceAll("\uD835\uDE16", "O");
뭐 이런식이다.
참고로 아래 사이트에서 코드를 찾을 수는 있다.
https://www.fileformat.info/info/unicode/char/1d616/index.htm
Java의 icu4j 라는 패키지가 있어서,
어떠거는 변환이 가능하기는 하다.
String TRANSLITERATE_ID = "NFD; Any-Latin; NFC";
String NORMALIZE_ID = "NFD; [:Nonspacing Mark:] Remove; NFC";
String r = cRowSet.getString("TITLE");
temp = Transliterator.getInstance(TRANSLITERATE_ID + "; " + NORMALIZE_ID).transform(r);
log.debug("R : " + r);
log.debug("ICU4 : " + temp);
out.println("<br>ICU4 : " + temp);
temp = Transliterator.getInstance("Any-Latin; NFD; [^\\p{Alnum}] Remove").transform(r);
log.debug("R : " + r);
log.debug("ICU4 : " + temp);
out.println("<br>ICU4 : " + temp);
temp = Transliterator.getInstance("Traditional-Simplified").transform(r);
log.debug("R : " + r);
log.debug("ICU4 : " + temp);
out.println("<br>ICU4 : " + temp);
temp = Transliterator.getInstance("Any-Latin; Latin-ASCII").transform(r);
log.debug("R : " + r);
log.debug("ICU4 : " + temp);
out.println("<br>ICU4 : " + temp);
찾아보니 하나는
MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL, 하나는
MATHEMATICAL SANS-SERIF ITALIC CAPITAL
replaceAll("\uD835\uDE64", "o");
이렇게 하면 첫번째 케이스의 소문자 o를 변환할수는 있음
소문자 코드셋은
replaceAll("[\uD835\uDE56-\uD835\uDE6F]", "-");
두번째 케이스의 대문자 O는
replaceAll("\uD835\uDE16", "O");
뭐 이런식이다.
참고로 아래 사이트에서 코드를 찾을 수는 있다.
https://www.fileformat.info/info/unicode/char/1d616/index.htm
Java의 icu4j 라는 패키지가 있어서,
어떠거는 변환이 가능하기는 하다.
String TRANSLITERATE_ID = "NFD; Any-Latin; NFC";
String NORMALIZE_ID = "NFD; [:Nonspacing Mark:] Remove; NFC";
String r = cRowSet.getString("TITLE");
temp = Transliterator.getInstance(TRANSLITERATE_ID + "; " + NORMALIZE_ID).transform(r);
log.debug("R : " + r);
log.debug("ICU4 : " + temp);
out.println("<br>ICU4 : " + temp);
temp = Transliterator.getInstance("Any-Latin; NFD; [^\\p{Alnum}] Remove").transform(r);
log.debug("R : " + r);
log.debug("ICU4 : " + temp);
out.println("<br>ICU4 : " + temp);
temp = Transliterator.getInstance("Traditional-Simplified").transform(r);
log.debug("R : " + r);
log.debug("ICU4 : " + temp);
out.println("<br>ICU4 : " + temp);
temp = Transliterator.getInstance("Any-Latin; Latin-ASCII").transform(r);
log.debug("R : " + r);
log.debug("ICU4 : " + temp);
out.println("<br>ICU4 : " + temp);