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

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

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

46
задан Deduplicator 24 February 2015 в 02:38
поделиться

8 ответов

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

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

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

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

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

19
ответ дан 26 November 2019 в 20:37
поделиться

И затем существует несколько более старое перекод программа.

0
ответ дан 26 November 2019 в 20:37
поделиться

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

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

1
ответ дан 26 November 2019 в 20:37
поделиться

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

0
ответ дан 26 November 2019 в 20:37
поделиться

С энергией из командной строки:

vim -c "set encoding=utf8" -c "set fileencoding=utf8" -c "wq" filename
6
ответ дан Jakob 26 November 2019 в 20:37
поделиться

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

латинская прописная буква A U+00C2 с циркумфлексом
латинская прописная буква A U+00C3 с тильдой
Повреждение U+0082, разрешенное здесь
U+0083 Никакое повреждение здесь

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

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

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

Гўв‚ ¬Е “-> “ # должен быть вводной двойной изогнутой кавычкой
Гўв‚ ¬?-> ” # должен быть заключительной двойной изогнутой кавычкой

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

Hope, которая помогает.

8
ответ дан gregory 26 November 2019 в 20:37
поделиться

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

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

0
ответ дан 26 November 2019 в 20:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: