Как я могу Лучше всего Предположить Кодирование, когда BOM (Порядок байтов Mark) отсутствует?

Современное решение JS: (и находится в O (n))

const nums = new Set();
while(nums.size !== 8) {
  nums.add(Math.ceil(Math.random() * 100));
}

console.log([...nums]);

28
задан lkessler 17 December 2008 в 00:01
поделиться

4 ответа

Возможно, можно выйти из оболочки к сценарию Python, который использует Chardet: Universal, Кодирующая Детектор . Это - переопределение обнаружения кодировки символов, которое используемый Firefox, и используется много различных приложений . Полезные ссылки: код Mozilla , научно-исследовательская работа это было на основе (иронически, моему Firefox не удается правильно обнаружить кодирование той страницы), короткое объяснение , подробное объяснение .

9
ответ дан 2 revs 14 October 2019 в 12:03
поделиться

Вот , как блокнот делает это

существует также Python Универсальное Кодирование Детектора , который можно проверить.

5
ответ дан Community 14 October 2019 в 12:03
поделиться

Мое предположение:

  • Первый, проверьте, имеет ли файл значения байта меньше чем 32 (за исключением вкладки/новых строк). Если это делает, это не может быть ANSI или UTF-8. Таким образом - UTF-16. Просто должны выяснить порядок байтов. Для этого необходимо, вероятно, использовать некоторую таблицу допустимых кодов символов Unicode. При обнаружении с недопустимыми кодами попробуйте другой порядок байтов, если это соответствует. Если или соответствие (или не делают), проверьте, какой имеет больший процент алфавитно-цифровых кодов. Также Вы могли бы попробовать searchung за разрывы строки и определить порядок байтов от них. Кроме этого, у меня нет идей, как проверить на порядок байтов.
  • , Если файл не содержит значений меньше чем 32 (кроме упомянутого пробела), это - вероятно, ANSI или UTF-8. Попытайтесь анализировать его как UTF-8 и посмотрите, получаете ли Вы какие-либо недопустимые символы Unicode. Если Вы делаете, это - вероятно, ANSI.
  • , Если Вы ожидаете документы в неанглийской однобайтовой или многобайтовой кодировке не-Unicode, тогда Вы являетесь неудачливыми. Лучшая вещь, которую можно сделать, является чем-то как Internet Explorer, который делает гистограмму символьных значений и сравнивает ее с гистограммами известных языков. Это довольно часто работает, но иногда перестало работать также. И у Вас должна будет быть крупная библиотека гистограмм буквы для каждого языка.
4
ответ дан Vilx- 14 October 2019 в 12:03
поделиться

ASCII? Никакая современная ОС больше не использует ASCII. Они все используют коды на 8 битов, по крайней мере, подразумевая, что это - или UTF-8, ISOLatinX, WinLatinX, Макрочеловек, Shift JIS или независимо от того, что там.

единственный тест, о котором я знаю, должен проверить на недопустимые символы UTF-8. Если Вы находите кого-либо, то Вы знаете, что это не может быть UTF-8. То же, вероятно, возможно для UTF-16. Но когда это не набор Unicode, тогда будет трудно сказать, какой кодовой страницей Windows это могло бы быть.

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

существует код там для проверки законности символов UTF.

1
ответ дан Thomas Tempelmann 14 October 2019 в 12:03
поделиться
Другие вопросы по тегам:

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