12 / 12 / 5
Регистрация: 23.04.2013
Сообщений: 64
SQLite

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

02.10.2014, 21:12. Показов 2249. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru