Если файл содержит только десятичные байты 9 - 13, 32 - 126, это, вероятно, чистый текстовый файл ASCII. В противном случае это не так. Однако это может быть текст в другой кодировке.
Если при добавлении к вышеуказанным байтам файл содержит только десятичных байтов 128 - 255, это, вероятно, текстовый файл в 8-битном или переменной длины ASCII на основе кодирования, такого как ISO-8859-1, UTF-8 или ASCII + Big5. Если нет, то для некоторых целей вы можете остановиться здесь и считать файл двоичным. Однако это может быть текст в 16- или 32-битной кодировке.
Если файл не удовлетворяет вышеуказанным ограничениям, проверьте первые 2 - 4 байта файла на предмет метки порядка байтов :
- Если первые два байта являются шестнадцатеричными
FE FF
, файл будет ориентировочно UTF-16 BE.
- Если первые два байта являются шестнадцатеричными
FF FE
, а следующие два байта являются не шестнадцатеричными 00 00
, файл будет ориентировочно UTF-16 LE.
- Если первые четыре байта являются шестнадцатеричными
00 00 FE FF
, файл будет ориентировочно UTF-32 BE.
- Если первые четыре байта являются шестнадцатеричными
FF FE 00 00
, файл будет ориентировочно UTF-32 LE.
Если с помощью вышеупомянутых проверок вы определили предварительную кодировку, то проверьте только соответствующую кодировку ниже, чтобы убедиться, что файл не является двоичным файлом, который соответствует метке порядка байтов.
Если вы не определили предварительную кодировку, файл все еще может быть текстовым файлом в одной из этих кодировок, поскольку знак порядка байтов не является обязательным, поэтому проверьте все кодировки в следующем списке:
- Если файл содержит только двухбайтовые слова с прямым порядком байтов с десятичными значениями 9 - 13, 32 - 126 и 128 или выше, файл, вероятно, имеет формат UTF-16 BE.
- Если файл содержит только двухбайтовые слова с прямым порядком байтов и десятичными значениями 9 - 13, 32 - 126 и 128 или выше, файл, вероятно, UTF-16 LE.
- Если файл содержит только четырехбайтовые слова с прямым порядком байтов с десятичными значениями 9 - 13, 32 - 126 и 128 или выше, файл, вероятно, имеет формат UTF-32 BE.
- Если файл содержит только четырехбайтовые слова с прямым порядком байтов и десятичными значениями 9 - 13, 32 - 126 и 128 или выше, файл, вероятно, UTF-32 LE.
Если после всех этих проверок вы все еще не определили кодировку, файл не является текстовым файлом в какой-либо кодировке на основе ASCII, о которой я знаю, поэтому в большинстве случаев вы, вероятно, можете считать ее двоичной ( это может быть текстовый файл в кодировке, отличной от ASCII, такой как EBCDIC, но я подозреваю, что это выходит за рамки вашей озабоченности).