VARCHAR 数据不应该转换为 char * (MSSQL OLE DB)?



在一个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-8 C3 BD
  • UTF-16 FD00转换为UTF-8 EF B4 80

这就是你得到的吗?

最新更新