Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
140 / 96 / 47
Регистрация: 03.08.2013
Сообщений: 765

Неправильная кодировка в SQLite

07.11.2015, 20:31. Показов 2858. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, не правильная кодировка когда я с помощью SQLite получаю данные из файла "Login Data" (Chrome).

C++
1
2
3
4
5
6
LVITEM lvi;
lvi.mask = LVIF_TEXT;
wchar_t cbMultiByte = NULL;
lvi.pszText = (LPWSTR) colName[i];
lvi.iItem = SendDlgItemMessage(hDDlg, 1012, LVM_GETITEMCOUNT, 0, 0);
lvi.iSubItem = 0;
Вот что выводит
Миниатюры
Неправильная кодировка в SQLite  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.11.2015, 20:31
Ответы с готовыми решениями:

FFMpeg и неправильная кодировка
всем привет, ситуация следующая: использую библиотеку ffmpeg для того чтобы создать видео из последовательности картинок скачал...

Неправильная кодировка в консоли
#include "stdafx.h" #include <iostream> using namespace std; const int strsize = 20; int main() struct bop { char...

Перевод из string в wstring. Неправильная кодировка
Здорова господа! Перевожу строку из string в wstring, в строке русские символы и они выводятся в консоли не крякозябрами а просто...

21
07.11.2015, 20:39

Не по теме:

illya05, в скайпе у вашего оппонента не правильно мой ник написан. "Y" - пропущен.

0
 Аватар для Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 460
Записей в блоге: 7
07.11.2015, 20:45
illya05,

Не по теме:

мб в настройках проекта кодировку поправить?

0
140 / 96 / 47
Регистрация: 03.08.2013
Сообщений: 765
07.11.2015, 20:50  [ТС]
Цитата Сообщение от Крюгер Посмотреть сообщение
мб в настройках проекта кодировку поправить?
Не могу найти где. Но в ListBox выводит всё нормально
0
 Аватар для Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 460
Записей в блоге: 7
07.11.2015, 21:04
illya05, наверное как то так:[img]http://s010.***********/i311/1511/04/7ef093291258.png[/img]

Добавлено через 3 минуты, потому что так лучше

Не по теме:

в последних студиях так поменялось всё..

0
140 / 96 / 47
Регистрация: 03.08.2013
Сообщений: 765
07.11.2015, 21:05  [ТС]
Крюгер, Ничего не происходит
0
 Аватар для Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 460
Записей в блоге: 7
07.11.2015, 21:09
illya05, всмысле ссылка не работает, или не помогло?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
07.11.2015, 21:10
Цитата Сообщение от illya05 Посмотреть сообщение
C++
1
2
lvi.pszText = (LPWSTR) colName[i];
lvi.iItem = SendDlgItemMessage(hDDlg, 1012, LVM_GETITEMCOUNT, 0, 0);
А где гарантия, что colName[i] - это строка в широких символах, а не multibyte ?
1
140 / 96 / 47
Регистрация: 03.08.2013
Сообщений: 765
07.11.2015, 21:17  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
А где гарантия, что colName[i] - это строка в широких символах, а не multibyte ?
Когда я в listBox Выводил, было все нормально. Я могу предположить, что это была ASCII
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
07.11.2015, 21:28
Цитата Сообщение от illya05 Посмотреть сообщение
Когда я в listBox Выводил, было все нормально.
Это ничего не меняет.
И где код работы с SQLite ?
0
140 / 96 / 47
Регистрация: 03.08.2013
Сообщений: 765
07.11.2015, 21:33  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
sqlite3 *db; // Init SQLite
            char *errorMsg = 0;
            int rc;
            char *sql;
 
            rc = sqlite3_open(/*getenv("APPDATA") + */ "C:\\Users\\illya05 Studio\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Login Data Copy", &db);
            
            if(rc){ // Error handler
                //SendDlgItemMessage(hDlg, 1002, LB_ADDSTRING, NULL, (LPARAM)L"Connection Error!");
            }else{
                //SendDlgItemMessage(hDlg, 1002, LB_ADDSTRING, NULL, (LPARAM) L"Success!");
 
                sql = "SELECT action_url, username_value, password_value FROM logins";
                rc = sqlite3_exec(db, sql, callback, 0, &errorMsg);
 
                if(rc != SQLITE_OK){
                    SetDlgItemTextA(hDlg, 1003, (LPCSTR) errorMsg);
                    sqlite3_free(db);
                }else{
                    //SendDlgItemMessage(hDlg, 1002, LB_ADDSTRING, NULL, (LPARAM)L"Success Query!");
                }
            }
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
static int callback(void *notUsed, int argc, char **argv, char **colName){
    int i;
    LVITEM lvi;
    //SendDlgItemMessage(hDDlg, 1002, LB_ADDSTRING, NULL, (LPARAM) argc);
 
    for (i = 0; i < argc; i++){
        // First column
        LVITEM lvi;
        lvi.mask = LVIF_TEXT;
        //wchar_t cbMultiByte = NULL;
        //MultiByteToWideChar(CP_ACP, 0, colName[i], cbMultiByte, NULL, 0);
        lvi.pszText = (LPTSTR) colName[i];
        //lvi.pszText = (LPWSTR) colName[i];
        lvi.iItem = SendDlgItemMessage(hDDlg, 1012, LVM_GETITEMCOUNT, 0, 0);
        lvi.iSubItem = 0;
 
        int index = SendDlgItemMessage(hDDlg, 1012, LVM_INSERTITEM, 0, (LPARAM) &lvi);
        if(index != -1){
            // Second column
            lvi.mask = LVIF_TEXT;
            //cbMultiByte = NULL;
            //MultiByteToWideChar(CP_ACP, 0, argv[i], cbMultiByte, NULL, 0);
            //MessageBox(NULL, (LPCWSTR) GetLastError(), NULL, MB_OK);
            lvi.pszText = (LPTSTR) argv[i];
            lvi.iItem = index;
            lvi.iSubItem = 1;
            SendDlgItemMessage(hDDlg, 1012, LVM_SETITEM, 0, (LPARAM) &lvi);
        }
    }
    return 0;
}
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
07.11.2015, 21:48
colname - это массив char-строк (скорее всего, в UTF-8).
Их в любом случае сперва следует преобразовать или в UTF-16 (для функций
типа SendDlgItemMessageW), или в кодовую страницу, которая соответствует
текущей локали (и тогда можно юзать SendDlgItemMessageA).
1
140 / 96 / 47
Регистрация: 03.08.2013
Сообщений: 765
07.11.2015, 23:03  [ТС]
Убежденный, Не подскажите как? UTF-16 я не нашел.

Добавлено через 50 минут
Цитата Сообщение от Крюгер Посмотреть сообщение
всмысле ссылка не работает, или не помогло?
Не помогло
0
 Аватар для Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 460
Записей в блоге: 7
07.11.2015, 23:24
illya05, мне жаль =(
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
08.11.2015, 11:45
illya05, последовательность действий такая:

1. Разобраться, в какой кодировке приходят данные в callback от SQLite.
Это важно. Если там char, то это скорее всего UTF-8, но не факт.
Нужную информацию найдешь в документации по SQLite.

2. Убрать все приведения типов в стиле C, такие как это:
C++
1
lvi.pszText = (LPTSTR) colName[i];
или это:
C++
1
lvi.pszText = (LPWSTR) colName[i];
Если код после этого перестанет компилироваться - не беда, исправим позже.

3. Не использовать технику "Generic-Text Mapping". То есть, везде вместо
TCHAR писать wchar_t или char, вместо WNDCLASS писать WNDCLASSW или WNDCLASSA,
вместо MessageBox - MessageBoxW или MessageBoxA и т.д. Указание в явном виде
строковой принадлежности функций, структур и типов данных (т.е. XxxW или XxxA)
помогает избежать целого класса ошибок и делает ненужным опасные приведения
типов вроде тех, что описаны в пункте 2. Кроме того, сейчас нет никакого
резона использовать кодовые страницы типа CP-1251, т.к. Windows уже лет
пятнадцать как поддерживает Unicode; последней известной мне системой без
поддержки Unicode "из коробки" была Windows 98, но и там его можно было
прикрутить через MS Layer for Unicode.

4. Возвращаемся в пункт 1.
Если исходные данные (которые в callback -> colName) в кодировке UTF-8,
тогда следует преобразовать их в UTF-16 с помощью MultiByteToWideChar, а
затем вставлять в list box или куда там еще нужно, используя W-функции,
например, SendDlgItemMessageW и LVITEMW. Если исходные данные в кодировке,
которая совпадает с дефолтной кодировкой Windows, например CP-1251, тогда
варианта 2: а) преобразовать их в UTF-16 и действовать по рецепту выше
(предпочтительный путь); б) ничего не преобразовывать, но использовать
A-функции для работы с этими данными, т.е. SendDlgItemMessageA и LVITEMA.
Если исходные данные в другой кодировке, тогда вариант с UTF-16 практически
единственный.
1
140 / 96 / 47
Регистрация: 03.08.2013
Сообщений: 765
08.11.2015, 15:11  [ТС]
Убежденный, Я думаю проблема не совсем в этом. Почему в EditControl текст нормальный, а в ListView кракозябры? И еще я на могу убрать (LPWSTR) перед colName и argv. иначе будет ошибка "значение типа "char *" нельзя присвоить сущности типа "LPWSTR""
Миниатюры
Неправильная кодировка в SQLite  
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
08.11.2015, 15:15
Цитата Сообщение от illya05 Посмотреть сообщение
Почему в EditControl текст нормальный, а в ListView кракозябры?
Очевидно, потому что вставка текста в edit и в list view выполняется по-разному.

Цитата Сообщение от illya05 Посмотреть сообщение
И еще я на могу убрать (LPWSTR) перед colName и argv. иначе будет ошибка "значение типа "char *" нельзя присвоить сущности типа "LPWSTR"
Так я об этом и вещаю.
От приведения к LPWSTR строка не превратится из char и wchar_t.
Надо не приведение типов делать, а конвертировать текст из
одной кодировки в другую, или же использовать A-функции вместо W.
0
140 / 96 / 47
Регистрация: 03.08.2013
Сообщений: 765
08.11.2015, 15:45  [ТС]
Теперь там пустые значения
Миниатюры
Неправильная кодировка в SQLite  
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
08.11.2015, 15:53
Где код ?
0
140 / 96 / 47
Регистрация: 03.08.2013
Сообщений: 765
08.11.2015, 15:55  [ТС]
C++
1
2
3
4
5
6
7
8
// First column
        LVITEM lvi;
        lvi.mask = LVIF_TEXT;
        wchar_t* cbMultiByte = L"";
        MultiByteToWideChar(CP_ACP, 0, colName[i], 0, cbMultiByte, NULL);
        lvi.pszText = cbMultiByte;
        lvi.iItem = SendDlgItemMessage(hDDlg, 1012, LVM_GETITEMCOUNT, 0, 0);
        lvi.iSubItem = 0;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.11.2015, 15:55
Помогаю со студенческими работами здесь

SQLite неправильная кодировка
Здравствуйте. Понимаю, что тема уже давно изъезжена, но всё таки, не могу разобраться. Скачал БД SQLite, в командной строке создал таблицу...

Неправильная кодировка при выборке данных из SQLite
Здравствуйте, надеюсь на вашу помощь в следующей пробелме У меня программа, назовем ее главное приложение, работает с базой данных...

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

Неправильная кодировка
Господа, подскажите пожалуйста, почему у меня выставляется неправильная кодировка в браузерах, хотя в шапке прописана нужная? Сами...

Неправильная кодировка
Здравствуйте! Помогите пожалуйста, при экспорте в еxcel вместо русских букв выходят иероглифы какие-то. $fp = fopen('b.xls',...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru