Как исправить кодировку символов файла? - PullRequest
45 голосов
/ 25 сентября 2008

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

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

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

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

ç é

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

ç é

Ответы [ 12 ]

20 голосов
/ 18 декабря 2013

Выполните следующие действия с помощью Блокнота ++

1- Скопировать оригинальный текст

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

3- Вставить

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

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

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

19 голосов
/ 25 сентября 2008

РЕДАКТИРОВАТЬ: простая возможность исключить, прежде чем перейти к более сложным решениям: вы пытались установить набор символов в utf8 в текстовом редакторе, в котором вы читаете файл? Это может быть просто случай, когда кто-то отправляет вам файл utf8, который вы читаете в редакторе с именем cp1252.

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

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

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

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

8 голосов
/ 25 сентября 2008

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

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

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

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

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

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

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

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

6 голосов
/ 25 сентября 2008

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

vim -c "set encoding=utf8" -c "set fileencoding=utf8" -c "wq" filename
4 голосов
/ 25 сентября 2008
2 голосов
/ 29 июня 2016

В превосходном текстовом редакторе файл -> открыть заново с кодировкой -> выбрать правильную кодировку.

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

1 голос
/ 25 сентября 2008

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

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

0 голосов
/ 28 января 2016

Я нашел этот вопрос, когда искал решение проблемы с кодовой страницей, которая у меня была с китайскими иероглифами, но в итоге моя проблема была просто из-за того, что 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

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

0 голосов
/ 26 июня 2013

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

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

0 голосов
/ 23 марта 2010

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

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

...