문자가 문자인지 테스트하는 올바른 방법은 문자 유형이 Lu, Ll, Lt, Lm 또는 Lo 중 하나인지 테스트하는 것입니다. IBM의 ICU 라이브러리를 사용하여 유니 코드를 처리 할 수있는 매우 인기있는 라이브러리입니다.
http://icu-project.org/apiref/icu4c/uchar_8h.html
는 또한 문자의 범주를 결정하는 u_charType
을 직접 ICU에서 u_isalpha
기능을 사용하거나 할 수 있습니다. 유니 코드에는 영문자가 아닌 "문자"(중국어 문자 등)가 많이 있기 때문에 "문자"라는 용어가 "알파"보다 선호됩니다.
그러나 먼저 문자를 디코딩해야합니다. char
배열을 사용하는 경우 인코딩은 ASCII, LATIN-1, Windows 1252, UTF-8 또는 기타 다른 인코딩 일 수 있습니다. char
에 직접 액세스하면 플랫폼에 따라 서명되거나 서명되지 않을 수 있습니다. 4294967168과 같이 분명히 잘못된 번호가 표시되는 이유는 0x80이 부호가있는 char
으로 해석 될 때 발생하는 것입니다. unsigned int
로 전송하십시오.
테이블이 너무 커서 - 약 700k가되어야하므로 조회 테이블을 사용하는 것은 매우 좋지 않습니다. 대신 ICU를 사용하거나 문자 범위 테이블을 만들고이 테이블에서 이진 검색을 수행하는 것이 좋습니다. 이것은 매우 효율적일 수 있습니다.
저는 이러한 종류의 테이블을 정확하게 생성하기위한 도구를 만들고 있습니다. 이 도구는 현재 프로덕션을 위해 준비가되어 있지 않지만 모험심이 있다면 사용할 수 있으며 README에는 사용 방법의 예가 나와 있습니다.
https://github.com/depp/uniset
아스키 범위는 [0, 127]이고,하지 [0, 255]. – jamesdlin
나는 ASCII [0,255]에 관심이있다. 그 순간에 ö는 0에서 255까지의 ASCII 범위에 있어야합니다. 그러나 상응하는 값을 인쇄하려고하면 무의미한 숫자가 나오고 isalphaLUT [i]는 어디에서 거짓인지를 반환 할 때 true를 반환합니다. – Jake
ASCII 0..255가 아니라 0..127입니다. jamesdlin이 옳습니다. –