我需要使用VS2013将一些utf8编码的数字转换为c ++中的浮点数。标准库中是否有任何内容或由microsoft标题提供的内容可以帮助我做到这一点?
或者,我听说utf8应该与ASCII兼容,那有什么用吗?
答案 0 :(得分:3)
恐慌。对于浮动数字中使用的所有数字和所有其他字符,UTF8与ASCII相同。
UTF8通过字节序列表示unicode字符。这些序列具有可变长度。对于128以下的所有unicode字符,序列只是包含该字符的一个字节。因此,UTF8和ASCII之间没有区别。
您可以使用standard methods并忽略输入为UTF8。
答案 1 :(得分: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