2011-10-05 48 views
0

在一個C++程序中,我試圖使用OLE DB從MSSQL數據庫中讀取數據。我試圖讀取的列是VARCHAR類型。該列中的數據是從多值數據庫導入的。有時列中的數據有一個分隔符。分隔符是一個值標記(0Xfd)。我隱蔽從表中讀取到一個char *這樣的數據:不應將VARCHAR數據轉換爲char *(MSSQL OLE DB)?

retcode = WideCharToMultiByte(CP_UTF8, 0, (WCHAR*)pDBColumnAccess[nCol].pData, -1, (char *)pReadBuf, pDBColumnAccess[nCol].cbDataLen, NULL, NULL); 

一切都很好,如果數據不包含上述分隔符 - 值標記(0xfd)。但是當分隔符存在時,在轉換的數據中,值標記被一些垃圾字符替換。

不應該在VARCHAR的情況下轉換爲char *嗎?僅僅複製數據就足夠了,因爲它沒有任何覆蓋?

回答

0

WideCharToMultiByte從UTF-16轉換而來,但在UTF-16中沒有0xFD這樣的字符。所有字符都被編碼爲至少2個字節。你的意思是0x00FD(或甚至)?另外,UTF-8(自您指定CP_UTF8以來的「目標」編碼)並不保證所有字符都只能編碼爲一個字節。

根據UTF Converter

  • UTF-16 00FD轉換爲UTF-8 C3 BD
  • UTF-16 FD00轉換爲UTF-8 EF B4 80

這就是你所得到的?

+0

UTF Converter非常有用,感謝您的回覆和鏈接。我acutually意味着0x00FD。 – Sanish