Как я могу обнаружить кодирование/кодовую страницу текстового файла

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
292
задан james.garriss 3 October 2014 в 01:40
поделиться

9 ответов

Вы не можете обнаружить кодовую страницу, Вам нужно сказать его. Можно проанализировать байты и предположить его, но это может дать некоторым причудливым (иногда забавный) результаты. Я не могу найти его теперь, но я уверен, что Блокнот может быть обманут в отображение английского текста на китайском языке.

Так или иначе, это - то, что необходимо считать: Абсолютный минимум Каждый Разработчик программного обеспечения Absolutely, Положительно Должен Знать О Unicode и Наборах символов (Никакие Оправдания!) .

Конкретно Joel говорит:

Единственный Самый Важный Факт О Кодировке

, Если Вы полностью забываете все, я просто объяснил, помните один чрезвычайно важный факт. Не имеет смысла иметь строку, не зная, какое кодирование это использует. Вы больше не можете прятать голову в песок и притворяться, что "простой" текст является ASCII. Нет Такой Вещи Как простой текст.

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

258
ответ дан Arjun Sol 23 November 2019 в 01:40
поделиться

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

Большинство людей (или приложения) действительно наполняет в в значительной степени том же порядке каждый раз, часто на той же машине, таким образом, ее довольно вероятное, что, когда Bob создает .csv файл и отправляет его Mary, это будет всегда использовать Windows 1252 или безотносительно его значений по умолчанию машины к.

, Где возможно немного обучения клиентов никогда не причиняет ни одному боль:-)

0
ответ дан devstuff 23 November 2019 в 01:40
поделиться

Получил ту же проблему, но не сделал нашел хорошее решение все же для обнаружения его автоматически. Теперь я использую PsPad (www.pspad.com) для этого;) Хорошо работает

0
ответ дан DeeCee 23 November 2019 в 01:40
поделиться

Я сделал что-то подобное в Python. В основном Вам нужно много демонстрационных данных из различной кодировки, которая сломана скользящим двухбайтовым окном и сохранена в словаре (хеш), включил пар байта, обеспечивающих значения списков кодировки.

, Учитывая, что словарь (хеш), Вы берете свой входной текст и:

  • , если это запускается с какого-либо символа BOM ('\xfe\xff' для UTF-16-BE, '\xff\xfe' для UTF-16-LE, '\xef\xbb\xbf' для UTF-8 и т.д.), я рассматриваю его, как предложено
  • , в противном случае тогда берут достаточно большой образец текста, берут всех пар байта образца и выбирают кодирование, которое является наименее общим, предложенным из словаря.

, Если Вы также выбрали UTF, закодировал тексты, которые делают не , запускаются с любого BOM, второй шаг покроет тех, которые ускользнули от первого шага.

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

4
ответ дан tzot 23 November 2019 в 01:40
поделиться

Вы не можете обнаружить кодовую страницу

, Это - ясно ложь. Каждый веб-браузер имеет некоторый детектор универсального набора символов для контакта со страницами, которые не имеют никакого признака вообще кодирования. Firefox имеет тот. Можно загрузить код и видеть, как он делает это. См. некоторую документацию здесь . В основном это - эвристика, но тот, который работает действительно хорошо.

, Учитывая разумную сумму текста, даже возможно обнаружить язык.

Вот другой , я просто нашел Google использования:

15
ответ дан elixenide 23 November 2019 в 01:40
поделиться

Если Вы надеетесь обнаруживать non-UTF кодировку (т.е. никакой BOM), Вы в основном до эвристики и статистического анализа текста. Вы могли бы хотеть смотреть на документ Mozilla об обнаружении универсального набора символов ( та же ссылка с лучшим форматированием с помощью Wayback Machine ).

31
ответ дан GreenGiant 23 November 2019 в 01:40
поделиться

Конструктор класса StreamReader берет, 'обнаруживают кодирование' параметр.

3
ответ дан leppie 23 November 2019 в 01:40
поделиться

Notepad ++ имеет эту функцию прямо из коробки. Он также поддерживает его изменение.

7
ответ дан 23 November 2019 в 01:40
поделиться

На самом деле я искал общий, а не программный способ определения кодировки файла, но я этого не сделал. пока не нашел. Что я действительно обнаружил при тестировании с разными кодировками, так это то, что мой текст был UTF-7.

Итак, где я впервые делал: StreamReader file = File.OpenText (fullfilename);

Мне пришлось изменить его на: Файл StreamReader = новый StreamReader (полное имя файла, System.Text.Encoding.UTF7);

OpenText предполагает, что это UTF-8.

вы также можете создать StreamReader следующим образом new StreamReader (fullfilename, true), второй параметр означает, что он должен попытаться определить кодировку из байтовой метки файла, но в моем случае это не сработало.

0
ответ дан 23 November 2019 в 01:40
поделиться
Другие вопросы по тегам:

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