У меня есть текстовый файл с кодировкой 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
Ответ 5
Использовать iconv - см. Лучший способ конвертировать текстовые файлы между наборами символов?
Ответ 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
Также был поддержан Габриэлем ответ, глядя на данные в блокноте ++, что подсказывало мне о окнах.