我试图能够将字符“Т”(不是正常的大写字母 t,Unicode 十进制值 1058)从 C++ 发送到 VB
但是,使用下面的这种方法,消息返回到 VB,它显示为“Т”,这是上面用 ANSI 编码的字符。
#if defined(_MSC_VER) && _MSC_VER > 1310
# define utf8(str) ConvertToUTF8(L##str)
const char * ConvertToUTF8(const wchar_t * pStr) {
static char szBuf[1024];
WideCharToMultiByte(CP_UTF8, 0, pStr, -1, szBuf, sizeof(szBuf), NULL, NULL);
return szBuf;
}
#else
# define utf8(str) str
#endif
BSTR _stdcall chatTest()
{
BSTR Message;
CString temp("temp test");
temp+=utf8("\u0422");
int len = temp.GetLength();
Message = SysAllocStringByteLen ((LPCTSTR)temp, len+1 );
return Message;
}
如果我只是做 temp+=("\u0422"); 没有 utf8 功能。它将数据发送为“?” 它实际上是一个问号(有时unicode字符在VB中显示为问号,但仍然具有正确的unicode十进制值..这里不是这种情况......它会将其更改为问号。
在 VB 中,如果我将具有来自 Message 的数据的字符串变量输出为“Т”到文本文件,则它显示为“Т”。
因此,据我所知,它在 C++ 中的 UTF8 中,然后以某种方式在 VB 中转换为 ANSI(或在发送之前?),然后当输出到文件时,它又改回 UTF8?
从 C++ 发送到 VB 时,我只需要保持“Т”不变。我知道 VB 字符串可以保存该字符,因为我可以从 VB 中的另一个来源存储它(它显示为“?”,但具有正确的 unicode 十进制值)。
任何帮助是极大的赞赏。
谢谢