我有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;
}
答案 0 :(得分:4)
您应该使用MultibyteToWideChar将该字符串转换为unicode
答案 1 :(得分:1)
我有
中vector<BYTE>
表示字符串中的字符。我想将这些字符解释为ASCII字符并将它们存储在Unicode(UTF-16)字符串
只有在处理二进制数据时才应使用std::vector<BYTE>
。使用字符串时,请使用std::string
。请注意,此std::string
对象将包含将由一个或多个字节的序列(因此称为多字节字符)编码的特殊字符,但这些字符不是ASCII个字符
使用std::string
后,您可以使用MultiByteToWideChar
创建自己的函数,将std::string
(包含多字节UTF-8字符)转换为std::wstring
包含UTF-16编码点:
// 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;
}
答案 2 :(得分:0)
由于您正在使用MFC,请让CString
完成工作。