在Windows中的c ++中是否有对UTF的内置支持?

时间:2014-12-28 09:22:55

标签: c++ windows encoding

我需要使用VS2013将一些utf8编码的数字转换为c ++中的浮点数。标准库中是否有任何内容或由microsoft标题提供的内容可以帮助我做到这一点?

或者,我听说utf8应该与ASCII兼容,那有什么用吗?

2 个答案:

答案 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