powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Sqlite3: .import csv: русские буквы отображаются в виде "?".
19 сообщений из 19, страница 1 из 1
Sqlite3: .import csv: русские буквы отображаются в виде "?".
    #39720829
tcheo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пожалуйста, помогите разобраться, что необходимо в настройках Sqlite3, чтобы команда .import могла заимпортить cvs с русскими буквами.

sqlite> .mode csv
sqlite> .separator ;
sqlite> .import d:/Test.csv Test

sqlite> .schema Test
CREATE TABLE Test(
"????????" TEXT,
"?????????" TEXT,
"???????" TEXT,
"?????" TEXT
);

CSV простая, для теста. Четыре колонки, заполненные русскими буквами.

Посмотрела статьи в интернете. Вроде должно работать. У меня Windows10. Sqlite3 скачала последний отсюда https://www.sqlite.org/download.html
...
Рейтинг: 0 / 0
Sqlite3: .import csv: русские буквы отображаются в виде "?".
    #39721019
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По умолчанию, консоль использует OEM-ную кодовую страницу. Для русского это 866.
"Гуёвая часть", в свою очередь, использует ANSI-шную кодовую страницу. Для русского это 1251.
Чтобы консоль отображала русские буквы в ANSI-кодировке, нужно:
1. Задать для консоли TrueType-шрифт. Lucida или Consolas;
2. Сделать "chcp 1251" или в комстроке перезапуском оболочки sqlite или в самой этой оболочке (запуск системных команд).
...
Рейтинг: 0 / 0
Sqlite3: .import csv: русские буквы отображаются в виде "?".
    #39721104
tcheo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! Проверила шрифт. Стоит шрифт ТТ Consolas,
C:\Users>chcp 1251
Текущая кодовая страница: 1251

Результат тот же. И если распечатать данные в базе, то вижу

sqlite>select * from Test
"????";"????????";1;149
"????";"?????????";2;124

Теперь в базу, импортированную из csv, руками добавляю что-нибудь по-русски:

sqlite> INSERT INTO Test VALUES("Русский", "проверяем", "смотрим" , "результат");
sqlite> select * from Test;

"????";"????????";1;149
"????";"?????????";2;124
"Русский";"проверяем";"смотрим";"результат"
...
Рейтинг: 0 / 0
Sqlite3: .import csv: русские буквы отображаются в виде "?".
    #39721132
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там везде utf-8 ожидается по умолчанию, странно что совет выше помог.
...
Рейтинг: 0 / 0
Sqlite3: .import csv: русские буквы отображаются в виде "?".
    #39721478
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"По умолчанию" ожидается "системная кодировка". А это - ANSI.
Во что именно перекодируется системная кодировка внутри базы - вопрос отдельный.
...
Рейтинг: 0 / 0
Sqlite3: .import csv: русские буквы отображаются в виде "?".
    #39721494
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Речь не о консоли (cmd.exe), а о консольной утилите (sqlite3.exe) для работы с базами sqlite. Она и сам движок sqlite работают с UTF-8
https://www.sqlite.org/version3.html Support for UTF-8 and UTF-16
...
In the current implementation of SQLite, the SQL parser only works with UTF-8 text . So if you supply UTF-16 text it will be converted. This is just an implementation issue and there is nothing to prevent future versions of SQLite from parsing UTF-16 encoded SQL natively.
...
Рейтинг: 0 / 0
Sqlite3: .import csv: русские буквы отображаются в виде "?".
    #39721498
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот мы делаем условный "read console" юникодной версии и получаем на выходе (сразу или с доп.шагом) UTF8 ...
"Внимание вопрос!" - с какой кодировкой работает сама "read console"?
...
Рейтинг: 0 / 0
Sqlite3: .import csv: русские буквы отображаются в виде "?".
    #39721502
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovВот мы делаем условный "read console" юникодной версии и получаем на выходе (сразу или с доп.шагом) UTF8 ...
"Внимание вопрос!" - с какой кодировкой работает сама "read console"?
Без разницы. Получаем кодировку консоли GetConsoleCP() и дальше при вводе конвертация из нее в UTF8, при выводе - наоборот, из UTF8.

PS Сюда глянь 21680375 , я там точно такой же пример импорта давал и в файлах там UTF8.
...
Рейтинг: 0 / 0
Sqlite3: .import csv: русские буквы отображаются в виде "?".
    #39721514
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если бы "получаем кодировку консоли", то шаманство с chcp - не требовалось бы.
Раз требуется, то работают с кодировкой по умолчанию.
...
Рейтинг: 0 / 0
Sqlite3: .import csv: русские буквы отображаются в виде "?".
    #39721522
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovЕсли бы "получаем кодировку консоли", то шаманство с chcp - не требовалось бы.
Раз требуется, то работают с кодировкой по умолчанию.
Оно и так не требовалось, хз зачем chcp тут упомянуто. Наверно поэтому 21710919 :
Basil A. SidorovПосмотрела статьи в интернете.

Перевожу на понятный:
tcheoПожалуйста, помогите разобраться, что необходимо в настройках Sqlite3, чтобы команда .import могла заимпортить cvs с русскими буквами.

sqlite> .mode csv
sqlite> .separator ;
sqlite> .import d:/Test.csv Test
Это она импортировала из d:/Test.csv, который в неизвестно какой кодировке (подозреваю 1251). Заметь кодировка консоли тут ни при чем. Кодировка импорта никак не указывается. Импорт консоль не использует.

Затем продолжает эксперименты
tcheoТеперь в базу, импортированную из csv, руками добавляю что-нибудь по-русски:

sqlite> INSERT INTO Test VALUES("Русский", "проверяем", "смотрим" , "результат");
sqlite> select * from Test;

"????";"????????";1;149
"????";"?????????";2;124
"Русский";"проверяем";"смотрим";"результат"
То что было импортировано так и осталось вопросами, а то что добавлено INSERT нормально отображается, т.к. тут нет проблем с кодировкой, см. мой пост 21712421
...
Рейтинг: 0 / 0
Sqlite3: .import csv: русские буквы отображаются в виде "?".
    #39722181
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё не так просто ...
Если кодировать кирилицу в UTF8, а потом "разглядывать" эти байты как WIN1251, то будут не очень понятные, но очень характерные строки текста.

Если кодировать кирилицу в WIN1251, а потом "разглядывать" эти байты как UTF8, то будет "mailformed string". Случай специально подобранных бессмысленных буквосочетаний - не учитываем.

Отсюда вопрос - что вообще могло импортироваться из ANSI-кирилицы приложением, которое "умеет" только UTF8?
...
Рейтинг: 0 / 0
Sqlite3: .import csv: русские буквы отображаются в виде "?".
    #39722245
tcheo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, пожалуйста, можем ли мы как-то влиять на кодировку в CSV? Чтобы там был UTF8?
...
Рейтинг: 0 / 0
Sqlite3: .import csv: русские буквы отображаются в виде "?".
    #39722251
tcheo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или 1251?
...
Рейтинг: 0 / 0
Sqlite3: .import csv: русские буквы отображаются в виде "?".
    #39722345
tcheo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TТам везде utf-8 ожидается по умолчанию, странно что совет выше помог.
Не помог. Импортированная база не отображается в консоли. А INSERT русским текстом в любом случае добавляет и sqlite добавку корретно отображает.
...
Рейтинг: 0 / 0
Sqlite3: .import csv: русские буквы отображаются в виде "?".
    #39722373
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tcheoПодскажите, пожалуйста, можем ли мы как-то влиять на кодировку в CSV? Чтобы там был UTF8?Виндовый блокнот позволяет выбрать кодировку при сохранении файла.

P.S.
При сохранении в UTF8 виндовый блокнот, зачем-то, лепит в начало файла B(yte)O(rder)M(ark).
Если, вдруг, будет мешать, то и от него можно избавиться, не прибегая к посторонним средствам.
...
Рейтинг: 0 / 0
Sqlite3: .import csv: русские буквы отображаются в виде "?".
    #39722467
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tcheoDima TТам везде utf-8 ожидается по умолчанию, странно что совет выше помог.
Не помог. Импортированная база не отображается в консоли.
Потому что это НЕ тоже самое что
tcheo А INSERT русским текстом в любом случае добавляет и sqlite добавку корретно отображает.
В чем разница я выше описал.

Можно ли сделать импорт CSV в кодировке 1251? - не знаю, почитаю документацию на sqlite3.exe, вроде нельзя, но не уверен.

В общем случае элементарно решается, но не с помощью sqlite3.exe, надо лишь написать свой конвертер 1251 в utf-8
...
Рейтинг: 0 / 0
Sqlite3: .import csv: русские буквы отображаются в виде "?".
    #39722584
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для Sqlite3 не нашел как 1251 задать, но случайно наткнулся на скриншот SQLite Studio, там есть выбор кодировки.
...
Рейтинг: 0 / 0
Sqlite3: .import csv: русские буквы отображаются в виде "?".
    #39722649
tcheo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо)))). В UTF8 пробовали перекодировать. Вместо "?" появились буквы, но не те, что надо, бракозябры какие-то. Попробую UTF16.
...
Рейтинг: 0 / 0
Sqlite3: .import csv: русские буквы отображаются в виде "?".
    #39722880
tcheo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое. Попробовала перевести в UTF8 через виндовый notepad и база стала корректно читаться. До этого пытались через notepad++
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Sqlite3: .import csv: русские буквы отображаются в виде "?".
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]