Как перегнать строки cp866, закодированные в latin1 в юникод?

Перегоняю базу ФИАС в БД mysql.
Штука вот в чем. Базы доступны для скачивания в xml или dbf (надеюсь, кто-нибудь еще помнит, что это такое?)
Подумал, выбрал dbf. Потому, что с xml вообще непонятно, что делать, а для dbf есть утилита dbf2mysql
Все бы ничего, если бы не:
1. Автор утилиты, кажется, никогда не думал, что кому-то могут понадобиться кодировки, отличные от latin1
2. Сама база (dbf) в старой доброй ламповой cp866
3. Мой mysql — в utf8

Итого имеем. Строки cp866, интерпретируемые утилитой как latin1 загоняются в таблицы utf8
Вопрос: как сделать по-людски?
Сливать дамп с принудительной latin1 и руками перегонять сначала в cp866, а потом в юникод пробовал. Но, во-первых, база невозможно большая. Каждый раз гонять туда-сюда дампы — проще застрелиться. А, во-вторых, при таких операциях теряются символы в верхнем регистре. (Вместо них появляется "?").

Логика подсказывает, что надо перегнать поля в blob, а потом обратно в varchar c другой кодировкой, и так несколько раз. Но почему-то не выходит.

Предлагайте варианты.

Заранее спасибо.
  • Вопрос задан
  • 4930 просмотров
Решения вопроса 1
megahertz
@megahertz
full stack разработчик
Когда решал такую задачу понял что проще всего написать миниконвертер. Времени ушло значительно меньше чем на поиск готовых решений.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@S1ashka
база в utf? таблицы в utf? соединение в utf? где-нибудь обязательно latin да вылезет
Ответ написан
miraage
@miraage
Старый прогер
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы