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

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

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

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

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

ç é

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

ç é

Ответ 1

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

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

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

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

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

Ответ 2

Выполните следующие шаги с помощью Notepad ++

1- Скопируйте исходный текст

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

3- Вставить

4- Затем для преобразования в Юникод, перейдя снова в одно и то же меню: Кодирование → "Кодировать в UTF-8" (не "Преобразовать в UTF-8" ) и, надеюсь, оно станет читаемым

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

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

Ответ 3

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

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

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

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

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

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

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

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

Ответ 4

С помощью vim из командной строки:

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

Ответ 6

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

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

Ответ 7

В возвышенном текстовом редакторе file → reopen with encoding → выберите правильную кодировку.

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

Ответ 8

И затем есть несколько более старая recode программа.

Ответ 9

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

Ответ 10

Я нашел простой способ автоматического определения кодировок файлов - измените файл на текстовый файл (на mac переименуйте расширение файла на .txt) и перетащите его в окно Mozilla Firefox (или File → Open). Firefox обнаружит кодировку - вы можете увидеть, что она придумала в режиме просмотра → Кодировка символов.

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

Ответ 11

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

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

Ответ 12

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

Если у кого-то еще есть такая же проблема, вы можете исправить ее, просто изменив локальную в 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

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