我试图能够发送字符“Т”(不正常的资本吨,unicode的十进制值1058)从C++到VBC++字符串编码UTF8/unicode的
然而,用这种方法进行的返回信息到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十进制值..这里不是这种情况...它将其更改为问号
In VB如果我输出的字符串变量有消息时,它的数据是“Т”到一个文本文件它显示为“Т”
所以据我可以告诉它在UTF8的C + +,然后以某种方式在VB中转换为ANSI(或在它发送之前),然后当输出到一个文件时,它变回UTF8?我只需要在从C++发送到VB时保持“Т”不变。 VB字符串可以容纳该字符,因为来自另一个字符串在VB内我可以存储它(它显示为“?”,但具有适当的Unicode十进制值)。
任何帮助是极大的赞赏。
感谢
为什么要用这样一个美丽的语言如C++,然后使用VB毁了吗? :P –
您可能需要阅读http://stackoverflow.com/a/6072627/13760的细节如何C++ 11个解决了这个问题你:) – Carl
宇宙先生,因为我吸:) – user1088794