Вообще нет возможности узнать кодировку. Особенно в прошлом многие кодировки кажутся похожими (только с разными акцентированными символами).
Для многих протоколов inte rnet существует способ передать кодировку, чтобы программа знала предполагаемая кодировка. Вы видите это с электронной почтой, ftp, http. Также в базах данных теперь нужно указывать кодировку (и, возможно, язык для сортировки строк).
Но для обычного текстового файла это было сложно. Многие программы пытаются правильно получить новую строку ( новая строка [unix] против перевод строки вместе с возврат каретки [ASCII], а иногда просто возврат каретки [старый Mac]) [Примечание: новая строка и перевод строки - это один и тот же символ].
Теперь мы находятся в гораздо более стандартизированном мире, поэтому кодирование проще. Часто у нас есть такой алгоритм:
Проверьте первые байты, если вы видите правильный BOF (3 разных способа запуска файла), вы интерпретируете его как UTF-8, UTF-16LE или UTF-16BE.
На машинах, отличных от Windows (или на Windows, но для веб-файлов):
Предположим это UTF-8. Если все в порядке, это должен быть UTF-8 (может быть, просто попробуйте первый блок символов [например, 4096]). UTF-8 имеет очень строгую последовательность символов (и запрещенных символов), поэтому файл, не относящийся к UTF-8, обычно не проходит проверку UTF-8. Примечание. ASCII - это подмножество UTF-8, поэтому вы будете правильно декодировать файлы ASCII в этой точке.
В противном случае предполагайте, что кодировка Latin-1 или «Windows ANSI» в другом Windows кодовых страниц (например, из вашей системы: вероятно, кто написал файл, с вашего же языка). Latin-1 - это подмножество «Windows ANSI» (и других кодовых страниц windows, и большинство символов должно быть в порядке.
На машинах Windows: go до указанной выше точки [UTF-8, с откатом], если вы в поле / niche / settings обычно можете ожидать UTF-8
- иначе: допустим, Latin- 1 или подходящей кодировкой «Windows ANSI». Windows попробуйте добавить спецификацию в UTF-8
В любом случае нужно разрешить пользователю указать кодировку (например, в случае сбоя вышеупомянутого алгоритма).
Для азиатских языков существуют другие алгоритмы, обычно проверяющие частые байты и группы байтов.
Примечание: есть также библиотеки, которые помогают определять язык, но наверняка вы видели программы и браузеры, которые не могли определить правильную кодировку. Это неизбежно.
Теперь Unicode становится стандартным способом, а «Windows ANSI» заменяет большинство всех кодировок для латинских шрифтов, поэтому задача несложная, но если нужно конвертировать старые файлы.