Как перегнать строки 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 другой кодировкой, и так несколько раз. Но почему-то не выходит.