std::wstring
의 길이 (문자 수)는 어떻게 결정합니까?std :: wstring의 길이 찾기
을 사용하면 myStr.length()
을 사용하면 바이트 크기 (생각합니다)는 있지만 문자 수는 아닙니다. 문자 수를 찾기 위해 자체 함수를 만들어야합니까? 네이티브 C++ 방식 또는 기본 WinAPI 방식입니까?
std::wstring
의 길이 (문자 수)는 어떻게 결정합니까?std :: wstring의 길이 찾기
을 사용하면 myStr.length()
을 사용하면 바이트 크기 (생각합니다)는 있지만 문자 수는 아닙니다. 문자 수를 찾기 위해 자체 함수를 만들어야합니까? 네이티브 C++ 방식 또는 기본 WinAPI 방식입니까?
std::wstring::length()
당신에게, 즉 wchar
문자이 wstring
객체의 원자 단위로 정의되는 문자의 수를 줄 것이다. 표준이 의미하는 바는 characters
입니다 (표준에서 단어 사용에 대한 자세한 내용은 this post 참조).
그러나 유니 코드 문자의 경우 wchar
이 하나의 유니 코드 문자와 일치하는지 여부는 wstring
내부에서 사용되는 인코딩에 따라 다릅니다. UTF-16이 사용되는 경우 (반드시 그런 것은 아니지만), wchar
은 기본 다국어 평면 (즉, ISO-8859에서 파생 된 모든 문자 집합과 일반적으로 사용되는 대부분의 문자 집합)에 대해 하나의 유니 코드 문자에 해당합니다 CJK 문자가 아닌 이국적인 (예 : 중국어 (고전) 문자) (*). 문자 수를 으로 바로 가져 오려면이 경우 모두 유니 코드 문자를 사용하려면 유니 코드 인식 라이브러리 (예 : ICU)를 사용하거나 직접 코딩해야합니다.二三 一 @로 사용되는결합 문자가 제대로 지적 경우
(*) 추가 문제가 있습니다. 그것들을 정확하게 카운트하는 것은 적절한 라이브러리를 사용하는 것이 가장 좋습니다.
"UTF-16이 사용되는 경우 일반적으로"* "일반적으로"라고하면 "Windows에서"를 의미합니다. –
@NicolBolas _often_ :)으로 변경하겠습니다. – jogojapan
UTF-16 용 BMP 내에서도 양식과 프리젠 테이션 양식을 결합하면 하나의 "문자"가 두 개의 'wchar'으로 표시 될 수 있습니다. –
wchar_t
엔티티의 길이를 알고 싶다면 myStr.length()
을 사용하십시오. 유니 코드 코드 포인트의 크기를 알고 싶으면 코드를 계산하는 방법을 알고있는 라이브러리를 찾아야합니다. UTF-16으로 인코딩 된 코드 포인트가 하나 또는 두 개의 엔터티를 사용하는지 여부를 결정하는 규칙은 너무 어렵지 않으므로 http://en.wikipedia.org/wiki/Utf-16을 참조하십시오. wchar_t
이 16 비트 (대 32 비트)인지 확인하려면 sizeof(wchar_t) == 2
을 사용하십시오.
http://en.cppreference.com/w/cpp/string/basic_string/size : 문자열의 문자 수를 반환합니다. – billz
이 질문보기 : http://stackoverflow.com/questions/4183736/stdwstring- length –
"* myStr.length()를 사용하면 바이트 크기를 알 수 있지만 문자 수는 아닙니다. *"왜 이것을 생각합니까? – ildjarn