문제

기본 Node.js 모듈에서 유니 코드 문자열 처리에 ICU를 사용하고 있습니다. v8::String (에 따르면 이 문서)이 목적을 위해 C ++ API가 없습니다.

내 지식으로 V8은 UTF-16을 기대합니다 ExternalStringResource 다른 API이므로 UTF-16 처리에 ICU를 사용하고 싶습니다.
나는 특히 다음을 필요로한다.

  • UTF-16 문자열의 문자 (16 비트 코드 단위가 아님)를 반복하십시오.
  • UTF-16 문자열에 포함 된 문자 수 (16 비트 코드 단위가 아님)를 알려줍니다.

그래서 나는 ICU 문서를보고 UnicodeString 그리고 CharacterIterator 클래스. 하지만, UnicodeString A가 없습니다 fromUTF16 방법 만 fromUTF8 그리고 fromUTF32.

내가 확실하지 않은 또 다른 것은 UnicodeString 생성자 내가 제공 한 데이터를 복사합니까? ID 매우 선호합니다 불변의 객체로 작업하여 복사 작업을 수행하지 않아야하는 Zero-Copy 접근 방식을 사용하려면 내가 가리키는 버퍼를 사용하기 만하면됩니다.

나는 또한 내가 그냥 사용할 수 있는지 확실하지 않습니다 UCharIterator (어떻게 든 변환 할 수 있다고 가정합니다 UChar* 내 UTF-16 문자열에서).

그래서 내 질문은 다음과 같습니다. 위의 목적으로 ICU를 어떻게 사용합니까?

답변 해 주셔서 감사합니다!

도움이 되었습니까?

해결책

UnicodeString 기본적으로 저장에 UTF-16을 사용합니다. 그것이 바로 그 이유입니다 fromUTF8 그리고 fromUTF32: UTF-16에서 전환 할 수 없습니다.

데이터를 복사합니다. 그것은 매우 유사한 소유 문자열입니다 std::string.

당신이 사용할 수있는 UCharIterator 데이터를 복사하고 싶지 않은 경우 UChar 16 비트 값입니다. 당신은 그것을 정의하여 함께 일하는 선호하는 16 비트 유형이되도록 강요 할 수 있습니다. UCHAR_TYPE 매크로 :

#defined (예 : char16_t) 또는 wchar_t가 16 비트 인 경우 uchar를 uchar_type로 정의하십시오. 항상 서명되지 않은 것으로 가정합니다.

도 사용할 수 없다면 uchar를 uint16_t로 정의하십시오.

이로 인해 UCHAR 플랫폼의 정의는 의존적이지만 16 비트 WCHAR_T 유형을 가진 플랫폼과 직접 문자열 유형 호환성을 허용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top