如何将ANSI字节转换为Unicode字符串

How to convert ANSI byte to Unicode string?

本文关键字:Unicode 字符串 转换 字节 ANSI      更新时间:2023-10-16

我有一个vector<BYTE>,它表示字符串中的字符。我想将这些字符解释为ASCII字符,并将它们存储在Unicode(UTF-16)字符串中。当前代码假定vector<BYTE>中的字符是Unicode而不是ASCII。这适用于标准ASCII,但不适用于扩展ASCII字符。这些字符需要使用通过GetACP()检索的当前代码页进行解释。如何使用这些ASCII字符创建Unicode(UTF-16)字符串?

编辑:我认为解决方案应该与这里讨论的宏有关:http://msdn.microsoft.com/en-us/library/87zae4a3(v=vs.80).aspx我只是不太确定实际的实现会如何。

int ExtractByteArray(CATLString* pszResult, const CByteVector* pabData)
{
    // place the data into the output cstring
    pszResult->Empty();
    for(int iIndex = 0; iIndex < pabData->GetSize(); iIndex++)
        *pszResult += (TCHAR)pabData->GetAt(iIndex);
    return RC_SUCCESS;
}

您应该使用MultibyteToWideChar将该字符串转换为unicode

既然使用MFC,就让CString来完成这项工作。

我有一个vector<BYTE>,它表示字符串中的字符。我想将这些字符解释为ASCII字符,并将它们存储在Unicode(UTF-16)字符串中

只有在处理二进制数据时才应使用std::vector<BYTE>。使用字符串时,请改用std::string。请注意,此std::string对象将包含特殊字符,这些字符将由一个或多个字节的序列编码(因此称为多字节字符),但这些字符不是ASCII字符。

使用std::string后,可以使用MultiByteToWideChar创建自己的函数,该函数将std::string(包含多字节UTF-8字符)转换为包含UTF-16编码点的std::wstring

// multi byte to wide char:
std::wstring s2ws(const std::string& str)
{
    int size_needed = MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), NULL, 0);
    std::wstring wstrTo(size_needed, 0);
    MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), &wstrTo[0], size_needed);
    return wstrTo;
}