Форум программистов, компьютерный форум, киберфорум
Visual C++: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
12 / 12 / 5
Регистрация: 23.04.2013
Сообщений: 64
SQLite

Wchar_t и запись в файл

02.10.2014, 21:12. Показов 2262. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Выполняю запрос в SQLite, с помощью sqlite3_column_text16 получаю данные в wchar_t, но записать данные в файл не получается.

C++
1
2
3
4
5
6
7
8
9
ofstream fout;
//std::wofstream fout; // не помогает 
wchar_t *name;
fout.open(fileout,ios::app); //открываем для записи в конец файла
......
 
name    = (wchar_t*)sqlite3_column_text16( sql_stat, 0 );
wprintf(L"%s\n",name);
fout  << name << "\n";
Выходной файл имеет такое содержание:
C++
1
0045E7E8
А вывод в консоли нормальный. Всякие советы из интернета не помогли(функция wctomb() и.т.д).

С уважением, Waik/
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.10.2014, 21:12
Ответы с готовыми решениями:

Запись в файл
#include &lt;stdio.h&gt; int main(void) { FILE *fp; char buf; fp = fopen(&quot;test.txt&quot;, &quot;w+&quot;); fprintf(fp,...

Запись в файл
ofstream out1(&quot;c:\\1.txt&quot;); out1&lt;&lt;&quot;12345&quot;; out1.close();Этот код открывает файл, стирает все из него, записывает &quot;12345&quot; и...

sprintf() и wchar_t
Имеется структура с параметрами wchar_t *, её параметры необходимо пропустить через sprintf. Вроде как уже выяснил, что функция может...

9
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
02.10.2014, 21:35
Можно попробовать сразу CreateFile -> WriteFile -> CloseHandle.
Все равно после вывода в (w)ofstream там не будет UTF-16.
0
12 / 12 / 5
Регистрация: 23.04.2013
Сообщений: 64
02.10.2014, 21:38  [ТС]
Убежденный, не совсем вас понял. Читать файл из этой программы мне потом не нужно. Читать файл нужно через обычный блокнот или всякие другие ридеры.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
02.10.2014, 21:45
Цитата Сообщение от Waik Посмотреть сообщение
Читать файл из этой программы мне потом не нужно. Читать файл нужно через обычный блокнот или всякие другие ридеры.
Ну так он будет читаться, не вижу проблем.
UTF-16 - такая же "нормальная" кодировка, как UTF-8 или Win-1251.
0
12 / 12 / 5
Регистрация: 23.04.2013
Сообщений: 64
02.10.2014, 21:48  [ТС]
В Выходном файле абракадабра.
Например name имеет значение "Константин", но в файл содержит запись 0045E7E8.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
02.10.2014, 21:53
Цитата Сообщение от Waik Посмотреть сообщение
В Выходном файле абракадабра.
Например name имеет значение "Константин", но в файл содержит запись 0045E7E8.
Значит, пишете (или форматируете) текст неправильно.

В примере выше name - это указатель на void (см. прототип sqlite3_column_text16).
ofstream "не знает", что это строка и как ее писать в файл.
0
12 / 12 / 5
Регистрация: 23.04.2013
Сообщений: 64
02.10.2014, 22:02  [ТС]
Спасибо. А как объяснить файловому потоку что это строка ?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
02.10.2014, 22:09
Ну например, так (подразумевая, что fout - это wofstream):
C++
1
fout << (wchar_t const *)name << L"\n";
Только что-то я не совсем уверен, что туда правильно будет записана кириллица...
0
12 / 12 / 5
Регистрация: 23.04.2013
Сообщений: 64
02.10.2014, 22:15  [ТС]
Не помогает, пробовал указывать и (wchar_t*)
В файле все ровно 0045E7E8.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
02.10.2014, 22:30
Вариант 1.

Текст, полученный у sqlite3_column_text16, записать в файл через WriteFile.
Для надежности можно в начале файла записать BOM (0xFF 0xFE для UTF-16 LE).

Вариант 2.

Сконвертировать текст в UTF-8 (WideCharToMultiByte с CP_UTF8) и
записать в файл через WriteFile. Также можно добавить BOM
(0xEF 0xBB 0xBF для UTF-8).

Использовать fstream или iostreams для работы с юникодом я
вообще не советую.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.10.2014, 22:30
Помогаю со студенческими работами здесь

Не работает запись в файл
ну и следовательно поиск по названию, удаление и редактирование записей если менять тут string TYPE;//вид товара string...

Запись в файл (MFC)
Использую MFC CFile openFile; CString fName; fName = &quot;file.txt&quot;; if(!openFile.Open(fName,...

Запись в файл (MFC)
нужно произвести запись оценок есть структура struct stud { char f }; extern struct stud dat; описываю: int n,b; char chisloo; ...

Запись из массива в файл
Подскажите пожалуйста как записать массив байт в файл с 6 позиции массива например с помощью функции writefile или какой-либо другой. Очень...

Запись данных в файл
После того как программа отработала и записала данные в файл. Их необходимо просмотреть при помощи проводника. Как только файл открывается,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru