我需要將一些utf8編碼的數字轉換爲使用VS2013的C++中的浮點數。標準庫中是否有任何內容或微軟頭文件提供的幫助我做到這一點?在Windows中,是否有任何內置的C++支持UTF?
另外,我聽說utf8應該與ASCII兼容,有沒有什麼?
我需要將一些utf8編碼的數字轉換爲使用VS2013的C++中的浮點數。標準庫中是否有任何內容或微軟頭文件提供的幫助我做到這一點?在Windows中,是否有任何內置的C++支持UTF?
另外,我聽說utf8應該與ASCII兼容,有沒有什麼?
不要驚慌。對於浮點數中使用的所有數字和所有其他字符,UTF8與ASCII相同。
UTF8表示字節序列的Unicode字符。這些序列具有可變長度。對於128以下的所有Unicode字符,序列只是包含該字符的一個字節。因此對於你而言,UTF8和ASCII之間沒有區別。您可以使用standard methods並忽略輸入爲UTF8。
您可以使用MultiByteToWideChar
WinAPI函數,下面是示例代碼。
int UTF8toUTF16(const CHAR* utf8, WCHAR* utf16) {
int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
if (utf16 == NULL)
return len;
if (len>1) {
return MultiByteToWideChar(CP_UTF8, 0, utf8, -1, utf16, len);
}
return 0;
}
const CHAR* utf8str = "someutf8string";
int requiredLen = UTF8toUTF16(utf8str, nullptr);
if (requiredLen > 0) {
std::vector<WCHAR> utf16str(requiredLen, '\0');
UTF8toUTF16(utf8str.data(), &utf16str.front());
// do something with data
}
,如果你的數字是ASCII純那麼當然這種轉換會做什麼,但如果你的要求說,在輸入文本是UTF8則是安全的,你應該做這樣的轉換,至少我會做到這一點。
進一步轉化看看這裏:atoi() with other languages
這些都是數字:߀߁߂߃߄߅߆߇߈߉২3456789୦୧୨୩୪୫୬୭୮୯᠐᠑᠒᠓᠔᠕᠖᠗᠘᠙᧐᧑᧒᧓᧔᧕᧖᧗᧘᧙᱐᱑᱒᱓᱔᱕᱖᱗᱘᱙꘠꘡꘢꘣꘤꘥꘦꘧꘨꘩:) –
這很多 - 謝謝!我從來不知道有這麼多人。我必須承認,我的答案僅適用於所有數字中最簡單的數字,即您列表的前10位數字。 –
@HansPassant:你知道C++運行時是否有任何處理非ASCII數字的函數? –