如何確定std::wstring
中的長度(字符數)?查找std :: wstring的長度
使用myStr.length()
給出字節大小(我認爲),但它不是字符數。我是否需要創建自己的函數來查找字符數或是否有本地C++方式或本機WinAPI方式?
如何確定std::wstring
中的長度(字符數)?查找std :: wstring的長度
使用myStr.length()
給出字節大小(我認爲),但它不是字符數。我是否需要創建自己的函數來查找字符數或是否有本地C++方式或本機WinAPI方式?
std::wstring::length()
會給你的字符數,其中字符定義爲wstring
對象的原子單元,即wchar
。這就是標準在涉及characters
時的含義(關於標準中單詞使用的更多細節,請參見this post)。
但是,對於Unicode字符而言,一個wchar
是否對應於一個Unicode字符取決於wstring
中使用的編碼。如果使用UTF-16(通常(但不一定)),則一個wchar
將對應於僅用於基本多語言平面的一個Unicode字符(即,所有字符集都源自ISO-8859以及大多數常用CJK字符,但不是一些更奇特的(如古典漢字)字符)(*)。如果您想在這種情況下獲得全部 Unicode字符的字符數,則需要使用支持Unicode的庫(例如ICU),或者自行編碼。
(*)還有其他問題,如果系統的使用,@一二三組合字符正確地指出。正確計算這些數據最好使用適當的庫來完成。
「*如果使用的是UTF-16,通常是*」如果是「常用」,則表示「在Windows上」。 – 2013-02-21 03:01:37
@NicolBolas我會將其更改爲_often_ :) – jogojapan 2013-02-21 03:04:19
即使在UTF-16的BMP中,組合表單和表單形式可能會使一個「字符」顯示爲兩個「wchar」(反之亦然)。 – 2013-02-21 07:06:48
如果您想知道wchar_t
實體的長度,請使用myStr.length()
。如果你想知道Unicode codepoints的大小,你必須找到一個知道如何計算這些大小的庫。您也可以自己編寫一個 - 確定編碼爲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 2013-02-21 02:50:02
看到這個問題:http://stackoverflow.com/questions/4183736/stdwstring-長度爲 – 2013-02-21 02:50:49
「*使用'myStr.length()'給出字節大小(我認爲),但它不是字符數。*」你爲什麼這麼認爲? – ildjarn 2013-02-21 02:51:52