在一个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 *吗?仅仅按原样复制数据而不进行任何转换是否足够?
WideCharToMultiByte
从UTF-16转换而来,然而在UTF-16中没有0xFD
字符这样的东西。所有字符都被编码为至少2字节。你指的是0x00FD
(甚至是0xFD00
)吗?
此外,UTF-8(您指定的CP_UTF8
是您的"目标"编码)并不能保证所有字符都将被编码为一个字节。
根据UTF Converter:
- UTF-16
00FD
转换为UTF-8C3 BD
。 - UTF-16
FD00
转换为UTF-8EF B4 80
。
这就是你得到的吗?