【发布时间】:2013-01-13 22:24:36
【问题描述】:
我的程序使用的 2 个字符串中的某些字符有问题。
字符串 #1 使用从第 3 方应用程序获取数据的 VB 代码填充。 字符串 #2 从同一个第 3 方应用程序中获取类似数据,但它使用 C++ dll 获取数据并将其发送到 VB。
数据中有一些奇怪的符号。
我不太了解编码和不同的字符集,但我会尽力解释。
我将使用“Т”作为我的示例字符。
“Т”(注意这不是正常的大写 t)它是 unicode 十进制值 1058 http://www.unicodemap.org/details/0x0422/index.html
当此字符在运行时出现在 String #1 中时,它会显示为“?”,我相信这正是 VB6 为显示一些 unicode 字符所做的。当我在字符上使用 AscW 时,它返回正确的值 1058。
当我将字符串输出到文本文件时,它显示为“?”。
来自 C++ DLL 的字符串 #2 中的相同字符显示为 2 个字符“Т”
当我将该字符串输出到文本文件时,该字符正确显示为“Т”。
我只是出于测试目的将内容输出到文本文件。我只需要在运行时对 2 个字符串进行编码/显示相同。
知道这里发生了什么吗?有什么方法可以让奇怪的字符在两个字符串中显示相同?
谢谢
编辑:C++ dll 也是多字符集,并以 BSTR 字符串发送数据
C++ DLL 中的代码
allChat 是一个 CString
BSTR Message;
int len = allChat.GetLength();
Message = SysAllocStringByteLen ((LPCTSTR)allChat,len+1);
消息返回到 VB 应用程序.. 之后字符串没有任何反应。
String #1 只是一个普通的 VB 字符串
【问题讨论】:
-
这听起来像你在 C++ 中得到的 UTF8
-
你能扩展一下吗?从 C++ dll 填充的字符串听起来像 UTF8 吗?如果是这样,我应该弄清楚如何在 VB 中转换一次,还是应该在 C++ dll 发送数据之前做一些事情?
-
显示一些代码,你的 c++ 字符串的类型是什么
-
C++ 数据最初是在 CString 中,它在被发送到 VB 之前被转换为 BSTR,如下所示:将代码添加到 OP
-
显示一些代码,在此之前我无法回答