gpt4 book ai didi

C++ 字符串编码 UTF8/unicode

转载 作者:太空宇宙 更新时间:2023-11-04 11:59:42 25 4
gpt4 key购买 nike

我正在尝试能够从 C++ 向 VB 发送字符“Т”(不是普通的大写字母 t,unicode 十进制值 1058)

但是,使用下面的方法,消息返回到 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 十进制值)。

非常感谢任何帮助。

谢谢

最佳答案

BSTR 不是 UTF-8,它是 UTF-16,这是您使用 L"" 前缀得到的。把UTF-8转换出来​​,用CStringW。并使用 LPCWSTR 而不是 LPCTSTR

关于C++ 字符串编码 UTF8/unicode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14639218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com