UTF-8로 인코딩 된 문자열에서 악센트를 제거하려면 어떻게합니까? 라이브러리 함수를 사용하거나 변환 표를 사용하는 수백 가지 답변이 있습니다.UTF-8로 인코딩 된 문자열의 문자열 길이
실제 알고리즘 (그 아이디어와 그 이유는 무엇인지)을 찾고 있는데, 사용 준비가되어 있지 않습니다.
내 목표, 즉 예를 들어, utf8_strlen("Vypočítávání") = 12
가. 내가 의 길이를 중국어 클링 온을 포함한 모든 문자열을 계산하고 싶습니다 그래서 (A UTF-8로 인코딩 된 문자열의 개별 문자를 계산하는 것입니다.
이미 멀티 바이트 문자를 계산하는 방법을 알고있다. 현재의 바이트의 MSB가 1
경우, 나는 좀 더 바이트가 존재하는 것을 알고 다음 몇 바이트를 보면, 그 말할 수 :
110xxxxx
하나 이상을 의미 바이트가 계속됩니다.1110xxxx
두 개 더,11110xxx
세 개입니다.
는 (우리는 문자열이 올바르게 인코딩되어 있다고 가정 할 수 있습니다 즉. 순서가 유효한 UTF-8 스트림입니다. 즉, 그 바이트 실제로에 따라 것을 의미합니다.)
나는 한 바이트를 읽고 얼마나 많은 사람들이 하나의 유니 코드 코드 포인트를 지정하는지 알기 때문에, 나는 (다시, 스트림이 유효하다) 그들을 건너 뛸 수 있고 그에 따라 중간 합을 증가시킬 수있다.
문자 결합에 대해 어떻게해야합니까? 즉, 코드 포인트가 (ç
또는 중국어 이상한 곡선에서 č
에서 같은 háček 또는 디유)는 예를 들어 악센트 여부를 알 수있는 간단한 방법이있다? 그렇다면 나는 그들을 건너 뛰기를 고대하고있다.
고맙습니다.
네, 그렇게 할 수있는 간단한 방법이 있습니다. 불행하게도이 알고리즘은 알고리즘이 아니라 유니 코드 표준의 일부로 사용할 수있는 거대한 데이터 테이블의 테이블 조회입니다. 이들은 사용자가 수행 한 코드 포인트를 포함하여 모든 코드 포인트에 대해 모든 유형의 특성을 지정합니다. – jalf
당신이 무엇을 요구하고 있는지 불분명합니다. 제목이 질문의 내용과 일치하지 않습니다.이 질문은 액센트가 결합 문자를 사용하여 표현된다는 것을 암시하는 것으로 보이지만 대부분의 경우에는 그렇지 않습니다. 그리고 처리 바이트는 여기에서 실제로 무관하다; 그것은 개념적으로 그리고 프로그래밍에서 완전히 다른 수준에 있습니다. 그리고 문자열의 길이가 의미하는 바를 정의하지 않았습니다. –