2014-12-28 73 views

回答

3

不要驚慌。對於浮點數中使用的所有數字和所有其他字符,UTF8與ASCII相同。

UTF8表示字節序列的Unicode字符。這些序列具有可變長度。對於128以下的所有Unicode字符,序列只是包含該字符的一個字節。因此對於你而言,UTF8和ASCII之間沒有區別。您可以使用standard methods並忽略輸入爲UTF8。

+2

這些都是數字:߀߁߂߃߄߅߆߇߈߉২3456789୦୧୨୩୪୫୬୭୮୯᠐᠑᠒᠓᠔᠕᠖᠗᠘᠙᧐᧑᧒᧓᧔᧕᧖᧗᧘᧙᱐᱑᱒᱓᱔᱕᱖᱗᱘᱙꘠꘡꘢꘣꘤꘥꘦꘧꘨꘩:) –

+0

這很多 - 謝謝!我從來不知道有這麼多人。我必須承認,我的答案僅適用於所有數字中最簡單的數字,即您列表的前10位數字。 –

+0

@HansPassant:你知道C++運行時是否有任何處理非ASCII數字的函數? –

2

您可以使用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

相關問題