Ответы пользователя по тегу Кодировка символов
  • Как это расшифровать?

    sergey-kuznetsov
    @sergey-kuznetsov
    Автоматизатор
    Если нужен ответ на вопрос как расшифровать, то вот так:
    import java.nio.ByteBuffer;
    import java.nio.charset.Charset;
    import java.nio.charset.StandardCharsets;
    
    public class Main {
    
        public static void main(String[] args) {
            
            byte[] rawBytes = Charset.forName("Windows-1251")
                    .encode("ГђВќГђВµ ГђВЅГђВ°").array();
            String asUTF8 = StandardCharsets.UTF_8
                    .decode(ByteBuffer.wrap(rawBytes)).toString();
            byte[] bytes = StandardCharsets.ISO_8859_1
                    .encode(asUTF8).array();
            String result = StandardCharsets.UTF_8
                    .decode(ByteBuffer.wrap(bytes)).toString();
    
            System.out.println(result); // Не на ...йден...?
        }
    }


    Этот код не гарантирует полное восстановление конечно, но хотя бы текст станет читабельным.
    Проблема в том что изначальный поток байтов utf-8 был интерпретирован как ISO-8859-1/Latin-1/ASCII, но сохранён снова как utf-8. Затем строка была выведена в консоль под видом строки Windows-1251.
    Ответ написан
    Комментировать
  • Есть ли возможность перекодировать latin1 в utf-8?

    sergey-kuznetsov
    @sergey-kuznetsov
    Автоматизатор
    Сохраняем резервную копию базы в файл
    mysqldump --user=USERNAME -p --default-character-set=latin1 -c --insert-ignore --skip-set-charset -r file.sql DATABASE_NAME

    Преобразовываем в UTF-8
    iconv -f utf8 -t cp1252 file.sql | iconv -f cp1251 -t utf8 | sed -e 's/latin1/utf8/g' > file-utf8.sql

    Опустошаем базу
    mysql --user=USERNAME -p --execute="DROP DATABASE DATABASE_NAME; CREATE DATABASE DATABASE_NAME CHARACTER SET utf8 COLLATE utf8_general_ci;"

    Заливаем исправленную базу
    mysql --user=USERNAME --max_allowed_packet=16M -p --default-character-set=utf8 DATABASE_NAME < file-utf8.sql

    Как-то так
    Ответ написан
    Комментировать