Скорее всего, ваш текст не в кодировке ASCII. Например, в юникоде.
Это потому, что в таблице ASCII есть только символы, представленные целыми числами от 0 до 127. Таким образом, ничто не может быть использовано для представления арабских букв. Например, Unicode использует пять различных диапазонов для представления арабского языка:
- Арабский (0600—06FF, 224 знака)
- Дополнение на арабском языке (0750—077F, 48 знаков)
- Формы представления арабского языка-A (FB50 — FDFF, 608 символов)
- Формы представления арабского языка-B (FE70 — FEFF, 140 знаков)
- Цифровые символы Руми (10E60—10E7F, 31 знак)
И так как может быть больше букв / символов, которые допустимо для 8-битного значения (тип char
, длина которого составляет 1 байт), широкий символ используется для представления некоторых (или даже всех) этих букв .
В результате длина строки в символах будет отличаться от длины строки в байтах. Я предполагаю, что когда вы используете функцию sqlite3_bind_text
, вы передаете число символов в качестве четвертого параметра, тогда как это должно быть число байтов. Или вы можете неправильно интерпретировать эту длину при чтении строки из базы данных. В документации sqlite3_bind_text
говорится о четвертом параметре:
В тех подпрограммах, которые имеют четвертый аргумент, его значением является число
байтов в параметре. Чтобы было понятно: значение является числом
байты в значении, а не количество символов. Если четвертый
параметр отрицателен, длина строки - число байтов
до первого нулевого терминатора.
Убедитесь, что вы поступили правильно.
Смотри также:
Удачи!