Не следует ли преобразовать данные VARCHAR в char * (MSSQL OLE DB)? - PullRequest
0 голосов
/ 05 октября 2011

В программе на C ++ я пытаюсь прочитать данные из базы данных MSSQL с помощью OLE DB.Столбец, который я пытаюсь прочитать, относится к типу VARCHAR.Данные в столбце импортируются из многозначной базы данных.Иногда данные в столбце содержат разделитель.Разделитель - это маркер значения (0Xfd).Я преобразую данные, считанные из таблицы, в символ *, например:

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

Все хорошо, если данные не содержат вышеупомянутый маркер значения разделителя (0xfd).Но когда есть разделитель, в преобразованных данных маркер значения заменяется некоторыми ненужными символами.

Разве я не должен делать преобразование в char * в случае VARCHAR?Достаточно ли просто скопировать данные без каких-либо покрытий?

1 Ответ

0 голосов
/ 05 октября 2011

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.

Это то, что вы получаете?

...