Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
Вы не можете обнаружить кодовую страницу, Вам нужно сказать его. Можно проанализировать байты и предположить его, но это может дать некоторым причудливым (иногда забавный) результаты. Я не могу найти его теперь, но я уверен, что Блокнот может быть обманут в отображение английского текста на китайском языке.
Так или иначе, это - то, что необходимо считать: Абсолютный минимум Каждый Разработчик программного обеспечения Absolutely, Положительно Должен Знать О Unicode и Наборах символов (Никакие Оправдания!) .
Конкретно Joel говорит:
Единственный Самый Важный Факт О Кодировке
, Если Вы полностью забываете все, я просто объяснил, помните один чрезвычайно важный факт. Не имеет смысла иметь строку, не зная, какое кодирование это использует. Вы больше не можете прятать голову в песок и притворяться, что "простой" текст является ASCII. Нет Такой Вещи Как простой текст.
, Если у Вас есть строка, в памяти, в файле, или в электронном письме, необходимо знать, в каком кодировании это находится, или Вы не можете интерпретировать его или отобразить его пользователям правильно.
Так как это в основном сводится к эвристике, это может помочь использовать кодирование ранее полученных файлов из того же источника как первая подсказка.
Большинство людей (или приложения) действительно наполняет в в значительной степени том же порядке каждый раз, часто на той же машине, таким образом, ее довольно вероятное, что, когда Bob создает .csv файл и отправляет его Mary, это будет всегда использовать Windows 1252 или безотносительно его значений по умолчанию машины к.
, Где возможно немного обучения клиентов никогда не причиняет ни одному боль:-)
Получил ту же проблему, но не сделал нашел хорошее решение все же для обнаружения его автоматически. Теперь я использую PsPad (www.pspad.com) для этого;) Хорошо работает
Я сделал что-то подобное в Python. В основном Вам нужно много демонстрационных данных из различной кодировки, которая сломана скользящим двухбайтовым окном и сохранена в словаре (хеш), включил пар байта, обеспечивающих значения списков кодировки.
, Учитывая, что словарь (хеш), Вы берете свой входной текст и:
, Если Вы также выбрали UTF, закодировал тексты, которые делают не , запускаются с любого BOM, второй шаг покроет тех, которые ускользнули от первого шага.
До сих пор, это работает на меня (демонстрационные данные, и последующие входные данные являются подзаголовками на различных языках) с уменьшением коэффициентов ошибок.
Вы не можете обнаружить кодовую страницу
, Это - ясно ложь. Каждый веб-браузер имеет некоторый детектор универсального набора символов для контакта со страницами, которые не имеют никакого признака вообще кодирования. Firefox имеет тот. Можно загрузить код и видеть, как он делает это. См. некоторую документацию здесь . В основном это - эвристика, но тот, который работает действительно хорошо.
, Учитывая разумную сумму текста, даже возможно обнаружить язык.
Вот другой , я просто нашел Google использования:
Если Вы надеетесь обнаруживать non-UTF кодировку (т.е. никакой BOM), Вы в основном до эвристики и статистического анализа текста. Вы могли бы хотеть смотреть на документ Mozilla об обнаружении универсального набора символов ( та же ссылка с лучшим форматированием с помощью Wayback Machine ).
Конструктор класса StreamReader берет, 'обнаруживают кодирование' параметр.
Notepad ++ имеет эту функцию прямо из коробки. Он также поддерживает его изменение.
На самом деле я искал общий, а не программный способ определения кодировки файла, но я этого не сделал. пока не нашел. Что я действительно обнаружил при тестировании с разными кодировками, так это то, что мой текст был UTF-7.
Итак, где я впервые делал: StreamReader file = File.OpenText (fullfilename);
Мне пришлось изменить его на: Файл StreamReader = новый StreamReader (полное имя файла, System.Text.Encoding.UTF7);
OpenText предполагает, что это UTF-8.
вы также можете создать StreamReader следующим образом new StreamReader (fullfilename, true), второй параметр означает, что он должен попытаться определить кодировку из байтовой метки файла, но в моем случае это не сработало.