Как исправить кодировку файла?

у меня есть закодированный ANSI текстовый файл, который не должен был быть закодирован как ANSI, поскольку были подчеркнуты символов ANSI не поддерживает. Я бы предпочел работать с UTF-8.

можно ли декодировать данные правильно или они теряются при перекодировании?

какие инструменты я могу использовать?

вот пример того, что у меня есть:

ç é

Я могу сказать из контекста (café должно быть café), что это должны быть эти два символа:

ç é

12 ответов


EDIT: простая возможность устранить, прежде чем переходить к более сложным решениям: вы пытались установить набор символов в utf8 в текстовом редакторе, в котором Вы читаете файл? Это может быть просто случай, когда кто-то отправляет вам файл utf8, который Вы читаете в редакторе, чтобы сказать cp1252.

просто взяв два примера, это случай, когда utf8 читается через объектив однобайтовой кодировки, вероятно, один из iso-8859-1, iso-8859-15 или cp1252. Если вы может размещать примеры других проблемных символов, должно быть возможно сузить это больше.

поскольку визуальный осмотр символов может вводить в заблуждение, вам также нужно будет посмотреть на базовые байты: § вы видите на экране, может быть 0xa7 или 0xc2a7, и это определит вид преобразования набора символов, который вам нужно сделать.

можно предположить, что все ваши данные были искажены точно так же - что он пришел из того же источника и ушел через ту же последовательность преобразований, так что, например, в вашем тексте нет ни одного é, это всегда ç? Если это так, проблема может быть решена с помощью последовательности преобразований набора символов. Если вы можете быть более конкретным о среде, в которой вы находитесь, и базе данных, которую вы используете, кто-то здесь, вероятно, может сказать вам, как выполнить соответствующее преобразование.

в противном случае, если проблемные символы встречаются только в некоторых местах ваших данных, вам придется взять его экземпляр за экземпляром, основываясь на предположениях типа "ни один автор не намеревался помещать ç в свой текст, поэтому всякий раз, когда вы его видите, замените ç". Последний вариант более рискован, во-первых, потому, что эти предположения о намерениях авторов могут быть неправильными, во-вторых, потому, что вам придется самому определять каждый проблемный символ, что может быть невозможно, если слишком много текста для визуальной проверки или если он написан на иностранном для вас языке или системе письма.


выполните следующие действия с помощью Notepad++

1-скопировать исходный текст

2-в Notepad++ откройте новый файл, измените кодировку - > выберите кодировку, которую вы считаете исходным текстом. Попробуйте также кодировку "ANSI", так как иногда файлы Unicode читаются как ANSI некоторыми программами

3 - вставить

4-затем преобразовать в Unicode, перейдя снова через то же меню: Encoding - > " Encode in UTF-8 "(не "конвертировать в UTF-8") и, надеюсь, он станет читаемый

вышеуказанные шаги применяются для большинства языков. Вам просто нужно угадать исходную кодировку перед вставкой в notepad++, а затем преобразовать через то же меню в альтернативную кодировку на основе Unicode, чтобы увидеть, становятся ли вещи читаемыми.

большинство языков существует в 2 формах кодирования: 1 - старая форма ANSI (ASCII), только 8 бит, первоначально использовалась большинством компьютеров. 8 бит допускали только 256 возможностей, 128 из них, где обычные латинские и контрольные символы, последние 128 бит были прочитаны по-разному в зависимости от языковых настроек ПК 2 - новый стандарт Unicode (до 32 бит) дает уникальный код для каждого символа на всех известных в настоящее время языках и многое другое. если файл является unicode, его следует понимать на любом ПК с установленным шрифтом языка. Обратите внимание, что даже UTF-8 идет до 32 бит и так же широк, как UTF-16 и UTF-32 только он пытается остаться 8 бит с латинскими символами, чтобы сэкономить место на диске


когда вы видите последовательности символов, такие как ç и é, это обычно указывает на то, что файл UTF-8 был открыт программой, которая считывает его как ANSI (или аналогичный). Символы юникода, такие как:

U + 00C2 Латинская заглавная буква A с окружностью
U + 00C3 Латинская заглавная буква A с Тильдой
U + 0082 перерыв разрешен здесь
U + 0083 нет перерыва здесь

Как правило, отображаются в тексте ANSI из-за стратегии переменных байтов, которую использует UTF-8. Этот стратегия объясняется очень хорошо здесь.

преимущество для вас заключается в том, что появление этих нечетных символов позволяет относительно легко найти и, следовательно, заменить экземпляры неправильного преобразования.

Я считаю, что, поскольку ANSI всегда использует 1 байт на символ, вы можете справиться с этой ситуацией с помощью простой операции поиска и замены. Или более удобно, с программой, которая включает в себя сопоставление таблиц между оскорбительными последовательностями и желаемыми персонажи, подобные этим:

“ - > " # должно быть открытие двойной фигурной цитаты
â€? - >"# должна быть заключительная двойная фигурная цитата

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

надеюсь, это поможет.


С vim из командной строки:

vim -c "set encoding=utf8" -c "set fileencoding=utf8" -c "wq" filename


Если вы видите вопросительные знаки в файле или если акценты уже потеряны, возврат к utf8 не поможет вашему делу. например, если кафе стало кафе-изменение кодировки само по себе не поможет (и вам понадобятся исходные данные).

можете ли вы вставить здесь текст, который поможет нам ответить наверняка.


в текстовом редакторе sublime file - > reopen с кодировкой - > выберите правильную кодировку.

Как правило, кодировка определяется автоматически, но если нет, вы можете использовать метод, описанный выше.


и затем есть несколько старше перекодировка


есть программы, которые пытаются определить кодировку файла, как chardet. Затем вы можете преобразовать его в другую кодировку с помощью iconv. Но для этого требуется, чтобы исходный текст оставался нетронутым и никакая информация не терялась (например, путем удаления акцентов или целых букв с ударением).


Я нашел простой способ автоматического обнаружения кодировок файлов-измените файл на текстовый файл (на mac переименуйте расширение файла.txt) и перетащите его в окно Mozilla Firefox (или Файл -> Открыть). Firefox обнаружит кодировку - вы можете увидеть, что он придумал под View - > Character Encoding.

Я изменил кодировку моего файла, используя текст. сообщ после того, как я знал правильную кодировку. File - > Reopen с помощью кодировки и выберите кодировку. Затем File - > Save As и измените кодировку на UTF-8 и окончания строк в LF (или все, что вы хотите)


на OS X Synalyze Его! позволяет отображать части вашего файла в разных кодировках (все они поддерживаются библиотекой ICU). Как только вы узнаете, что такое исходная кодировка, вы можете скопировать весь файл (байты) через буфер обмена и вставить в новый документ, где выбрана целевая кодировка (UTF-8 или что угодно).

очень полезно при работе с UTF-8 или другими представлениями Unicode является UnicodeChecker


Я нашел этот вопрос при поиске решения проблемы с кодовой страницей, которую я имел с китайскими символами, но в конце концов моя проблема была просто проблемой с окнами, не отображающими их правильно в пользовательском интерфейсе.

в случае, если у кого-то еще есть та же проблема, вы можете исправить это, просто изменив локальный в windows на Китай, а затем обратно.

Я нашел решение здесь:

http://answers.microsoft.com/en-us/windows/forum/windows_7-desktop/how-can-i-get-chinesejapanese-characters-to/fdb1f1da-b868-40d1-a4a4-7acadff4aafa?page=2&auth=1

также поддержал ответ Габриэля, поскольку просмотр данных в notepad++ был тем, что подсказало мне о windows.