>

<cctype> 의 문자 분류를위한 표준 기능  그리고 <locale>  UTF-8과 같은 멀티 바이트 문자 인코딩은 다른 구현에 의존하지 않아야합니다. 적합한 라이브러리는 Boost.Locale 일 수 있습니다 (아마도 ICU를 백엔드로 사용). 불행히도 UTF-8로 인코딩 된 문자열 코드 포인트를 코드 포인트 또는 글리프를 글리프로 반복하고 분류하는 방법을 찾지 못했습니다. 대문자 또는 소문자, 공백 등

답변을 만족시키지 않고 비슷한 질문이있었습니다 :

  • 캐릭터 분류
  • 부스트. 로캘 및 인쇄
  • 부스트 로케일이 문자 레벨 규칙 유형을 제공하지 않은 이유 ?

그러나 다른 답변에서 제안한 것처럼 ICU에는 저수준 기능이 있습니다 :

  • 유니 코드 포인트가 'letter'이고 구두점 수가 아닌지를 알려주는 C ++ 함수
  • 부스트 로케일이 문자 수준 규칙 유형을 제공하지 않은 이유는 무엇입니까?

Q1: UTF-8로 인코딩 된 문자열을 반복하고 각 문자를 대문자 또는 소문자 또는 공백으로 분류하는 쉬운 소리 작업이 주어졌습니다. Boost.Locale을 사용하여 C ++에서 어떻게 구현합니까?

Q2: Boost.Locale이 수행 할 수 없지만 ICU는 수행 할 수 있습니다. 어떻게 Boost.Locale을 사용하여 ICU의 분류 함수에 적합한 값을 전달할 수 있습니까? ICU는 보통 int32_t를 사용합니다. Boost.Locale을 통해 UTF-8 문자열에서 이것을 얻는 방법은 무엇입니까?

Q3: UTF-8 문자열에서 작동하는 Boost.Locale의 기능은 일반적으로 로케일을 매개 변수로 사용합니다. 문자열에 어떤 언어가 포함되어 있는지 모르는 경우 해당 매개 변수를 전달하는 방법은 무엇입니까? 예 : 문자열은 로캘과 독립적으로 영어 또는 중국어 텍스트를 포함 할 수 있습니다. UTF-8은 WSpace 와 같은 속성을 정의하지 않습니다.  어떤 로케일과 독립적입니까? UTF-8 로캘 인 한 어떤 로캘을 제공하는 것이 중요합니까?

타겟 플랫폼은 Windows입니다. 컴파일러는 Visual Studio 2015입니다.

  • 답변 # 1

    로케일에는 인코딩뿐만 아니라 많은 현지화 항목이 포함되어 있습니다 (예 : 데이터/시간 형식, 숫자 표시).

    A1. 로케일이 문자 분류를 제공해야하는 이유는 무엇입니까? 중국/일본 전세를 분류 할 수 있습니까?

    A2. 무엇을 요구하는지 잘 모르면 ICU에 직접 전화 할 수 있습니다.

    A3. UTF-8은 로케일이 아닌 인코딩입니다. en_US.UTF-8, zh_CN.UTF-8 등과 같은 특수 로케일이 있습니다. 이 로케일은 모두 UTF-8을 사용하여 문자를 인코딩합니다. 문자열 로케일을 알 필요는 없으며 UTF-8은 모든 유니 코드 문자를 인코딩 할 수 있습니다. 유니 코드 응용 프로그램은 중국어, 일본어 또는 태국어에 관계없이 모든 유니 코드 글리프를 표시 할 수 있습니다.

    BTW, 부스트 정규식은 utf8 글리프 이터레이터를 제공합니다 http://www.boost.org/doc/libs/1_66_0/libs/regex/doc/html/boost_regex/ref/internals/uni_iter.html

    그리고 항상 유니 코드 문자열을 사용하고 유니 코드 API를 사용하며 Windows MBCS 인코딩을 피하십시오.

관련 자료

  • 이전 linux - r 반짝임 - 반짝이는 앱은 로컬 및 다른 반짝이는 서버에서 잘 작동하지만 내 서버에서는 작동하지 않습니다 오류 메시지가 없습니다
  • 다음 log4j2 구성 특성 전체 목록을 얻는 위치