2013-02-21 2 views
1

std::wstring의 길이 (문자 수)는 어떻게 결정합니까?std :: wstring의 길이 찾기

을 사용하면 myStr.length()을 사용하면 바이트 크기 (생각합니다)는 있지만 문자 수는 아닙니다. 문자 수를 찾기 위해 자체 함수를 만들어야합니까? 네이티브 C++ 방식 또는 기본 WinAPI 방식입니까?

+3

http://en.cppreference.com/w/cpp/string/basic_string/size : 문자열의 문자 수를 반환합니다. – billz

+0

이 질문보기 : http://stackoverflow.com/questions/4183736/stdwstring- length –

+2

"* myStr.length()를 사용하면 바이트 크기를 알 수 있지만 문자 수는 아닙니다. *"왜 이것을 생각합니까? – ildjarn

답변

3

std::wstring::length() 당신에게, 즉 wchar문자wstring 객체의 원자 단위로 정의되는 문자의 수를 줄 것이다. 표준이 의미하는 바는 characters입니다 (표준에서 단어 사용에 대한 자세한 내용은 this post 참조).

그러나 유니 코드 문자의 경우 wchar이 하나의 유니 코드 문자와 일치하는지 여부는 wstring 내부에서 사용되는 인코딩에 따라 다릅니다. UTF-16이 사용되는 경우 (반드시 그런 것은 아니지만), wchar은 기본 다국어 평면 (즉, ISO-8859에서 파생 된 모든 문자 집합과 일반적으로 사용되는 대부분의 문자 집합)에 대해 하나의 유니 코드 문자에 해당합니다 CJK 문자가 아닌 이국적인 (예 : 중국어 (고전) 문자) (*). 문자 수를 으로 바로 가져 오려면이 경우 모두 유니 코드 문자를 사용하려면 유니 코드 인식 라이브러리 (예 : ICU)를 사용하거나 직접 코딩해야합니다.二三 一 @로 사용되는결합 문자가 제대로 지적 경우

(*) 추가 문제가 있습니다. 그것들을 정확하게 카운트하는 것은 적절한 라이브러리를 사용하는 것이 가장 좋습니다.

+5

"UTF-16이 사용되는 경우 일반적으로"* "일반적으로"라고하면 "Windows에서"를 의미합니다. –

+0

@NicolBolas _often_ :)으로 변경하겠습니다. – jogojapan

+1

UTF-16 용 BMP 내에서도 양식과 프리젠 테이션 양식을 결합하면 하나의 "문자"가 두 개의 'wchar'으로 표시 될 수 있습니다. –

2

wchar_t 엔티티의 길이를 알고 싶다면 myStr.length()을 사용하십시오. 유니 코드 코드 포인트의 크기를 알고 싶으면 코드를 계산하는 방법을 알고있는 라이브러리를 찾아야합니다. UTF-16으로 인코딩 된 코드 포인트가 하나 또는 두 개의 엔터티를 사용하는지 여부를 결정하는 규칙은 너무 어렵지 않으므로 http://en.wikipedia.org/wiki/Utf-16을 참조하십시오. wchar_t이 16 비트 (대 32 비트)인지 확인하려면 sizeof(wchar_t) == 2을 사용하십시오.