невозможно вставить символы ascii выше 128 в базу данных oracle с помощью программы c ++ - PullRequest
0 голосов
/ 04 октября 2011

Я пытаюсь вставить символы выше диапазона ascii 128 с помощью программы на C ++ (символы Ø, Å). Работает нормально для символов ascii менее 128

Тип данных, используемый в базе данных: VARCHAR2

Эти символы вставляются в виде вопросительных знаков (????) в БД Если я установлю значение поля в БД с этими символами через Жабу и попытаюсь прочитать с помощью приложения, они будут прочитаны как вопросительные знаки (????)

Может ли кто-нибудь дать мне пример кода для вставки строк, содержащих эти символы (значение ascii выше 128).

Я думаю, что проблема с преобразованием типов данных. (Потому что на уровне приложения перед вставкой в ​​БД эти символы отображаются правильно. Также, если я задаю значение поля через Toad и считываю из БД, они читаются как вопросительные знаки. Я могу установить значение поля в БД, что означает, что столбец БД может содержать эти символы)

Я использую следующие методы для определения и привязки в моем приложении

OCIDefineByPos (p_sql, & p_dfn, p_DBCon-> p_err, iPos, (dvoid *) p-> un_DataArray.pzValue, (меч) iSize, SQLT_STR, (dvoid *) p-> un_FlagArray.pssValue, 0, 0, OCI_DEFAULT);

OCIBindByName (p_sql, & p_bnd, p_DBCon-> p_err, (текст *) zName, -1, (dvoid *) zValue, iSize, SQLT_STR, 0, 0, 0, 0, 0, OCI_DEFAULT);

Может ли кто-нибудь помочь мне Или, если у вас есть пример программы, которая может вставить значения ascii до 256, пожалуйста, поделитесь ею со мной

Ответы [ 2 ]

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

Это может быть связано с тем, что выше 128 символов ascii нет. ASCII - это 7-битная кодировка.

Чтобы добавить не-ascii символы (в ASCII нет символов Ø, Å), вам потребуется использовать другую кодировку для их вставки. В настоящее время большинство нормальных приложений используют utf8.

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

WE8MSWIN1252 соответствуют «8-битной западноевропейской кодовой странице MS Windows 1252».Вы должны преобразовать свои строки в кодовую страницу Windows 1252 перед тем, как вставить их в базу данных.

Например, в Windows, если ваши строки находятся в utf8, преобразуйте их в utf16 с помощью MultiByteToWideChar, а затем вернитесь в CodePage1252, используяWideCharToMultiByte

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...