Вопрос

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

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

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

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

ç é

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

ç é
Это было полезно?

Решение

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

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

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

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

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

Другие советы

Выполните следующие действия с помощью 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-битным с латинскими символами, просто чтобы сэкономить дисковое пространство.

Когда вы видите последовательности символов, такие как ç и é, это обычно указывает на то, что файл 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 не поможет вашему делу.напримересли кафе стало кафе - одна смена кодировки не поможет (нужны исходные данные).

Можете ли вы вставить сюда какой-нибудь текст, это поможет нам точно ответить.

И еще есть несколько более старый перекодировать программа.

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top