====== 유니코드 지원 ====== * [[en>Unicode|유니코드에 대한 기본적인 소개]] * [[en>UTF-8#Description|UTF-8 소개]] * [[http://unicode.org/Public/UNIDATA/UCD.html|유니코드 문자 데이터베이스(UCD)]]: 유니코드의 각 문자들에 대한 자료 * UnicodeData.txt: 수록된 내용은 꼭 이해하고 넘어 가시는 게 좋습니다. UAX #31 등의 구현에 필요합니다. * 문자열을 소문자로 바꾸거나 대문자로 바꾸거나 하는 작업은 CaseFolding.txt 등을 참고하시길 바랍니다. 유니코드 책 4장(아마도)에 관련 알고리즘도 쓰여 있을 겁니다. * [[http://www.unicode.org/reports/tr31/|UAX #31]]: 식별자(identifier)에 사용될 수 있는 문자와 문법에 사용될 수 있는 문자에 대해서 설명하고 있습니다. 쉽게 말하면 ID_Start로 시작하고 ID_Continue가 뒤에 붙는 문자열은 모두 식별자로 처리한다면 되는 소린데, 이들 집합을 UCD에서 정의하기 때문에 위에서 UCD를 이해하라고 한 겁니다. ;) * [[http://www.unicode.org/reports/tr15/|UAX #15]]: 하나의 문자열이 유니코드에서 여러 가지 형태로 표현될 수 있습니다. 이런 형태를 하나의 형태로 정규화해 주는 알고리즘이 유니코드 표준에 있는데, 흔히 NFC, NFD, NFKC, NFKD라고 하는 것들이 정규화 알고리즘입니다. 여기까지가 일반 언어에 관련된 것이고, 국제화(i18n) 및 지역화(l10n)를 신경쓰고 싶으시다거나 기타 등등을 원하신다면 이것도 읽어 보시길 권합니다. * 유니코드를 지원하는 정규식을 표준 라이브러리에 넣으신다면 [[http://www.unicode.org/reports/tr18/|UTS #18]]을 참고하세요. 다만 내용이 꽤나 방대하다는 게 문제인데, 특히 level 3 support 부분은 상당히 손이 많이 갈 것 같습니다. 적절히 필요한 만큼만 구현하면 될 듯. * 문자열을 단순히 코드포인트 순서대로 비교하지 않는다면 collation을 신경써야 겠죠. [[http://www.unicode.org/reports/tr10/|UTS #10]]이 많은 도움이 될 것입니다. 다만 모든 collation 알고리즘은 어떤 형태로든 collation data가 있어야 한다는 점이 문제네요. * 수학과 밀접하게 연관되는 언어를 원하신다면 [[http://www.unicode.org/reports/tr25/|UTR #25]]에 수학과 관련된 유니코드 지원에 대한 내용이 쓰여 있습니다. [[Fortress]] 같은 언어들도 참고해 보세요. (from http://langdev.net/post/138)