在C ++程序中,我试图使用OLE DB从MSSQL数据库中读取数据。我试图读取的列是VARCHAR类型。列中的数据是从多值数据库导入的。有时,列中的数据中包含分隔符。分隔符是值标记(0Xfd)。我将从表中读取的数据转换为char *,如下所示:
retcode = WideCharToMultiByte(CP_UTF8, 0, (WCHAR*)pDBColumnAccess[nCol].pData, -1, (char *)pReadBuf, pDBColumnAccess[nCol].cbDataLen, NULL, NULL);
如果数据不包含上面提到的分隔符 - 值标记(0xfd),那么一切都很好。但是当分隔符存在时,在转换后的数据中,值标记被一些垃圾字符替换。
在VARCHAR的情况下,我不应该转换为char *吗?只是按原样复制数据而不进行任何转换是否足够?
答案 0 :(得分:0)
WideCharToMultiByte
转换为UTF-16,但UTF-16中没有0xFD
字符。所有字符都编码为至少2个字节。你的意思是0x00FD
(甚至是0xFD00
)吗?
此外,UTF-8(您指定CP_UTF8
后的“目标”编码)并不保证所有字符都只能在一个字节内编码。
00FD
转换为UTF-8 C3 BD
。FD00
转换为UTF-8 EF B4 80
。这是你得到的吗?