Haskell:
factorial n = product [1..n]
Я бы просто использовал
file -bi myfile.txt
, чтобы определить кодировку символов конкретного файла.
Решение с внешней зависимостью, но я подозреваю, что файл
очень распространено в настоящее время среди всех полусовременных дистрибутивов.
РЕДАКТИРОВАТЬ:
В ответ на комментарий Лоуренса Гонсалвеса: b
- вариант быть «кратким» (без указания имени файла) и i
является сокращенным эквивалентом - mime
, поэтому наиболее переносимым способом (включая Mac OSX), вероятно, будет:
file --mime myfile.txt
Невозможно быть на 100% уверенным (если только вы не имеете дело с форматом файла, который внутренне определяет его кодировку).
Большинство инструментов, которые пытаются сделать это различие, будут пытаться декодировать файл как utf-8 (так как это более строгая кодировка), и если это не удается, вернуться к iso-8859-1. Вы можете сделать это с помощью iconv
«вручную» или использовать файл
:
$ file utf8.txt
utf8.txt: UTF-8 Unicode text
$ file latin1.txt
latin1.txt: ISO-8859 text
Обратите внимание, что файлы ASCII совместимы как с UTF-8, так и с ISO-8859-1.
$ file ascii.txt
ascii.txt: ASCII text
Наконец: нет реального способа отличить ISO-8859-1 от ISO-8859-2, например, если вы не собираетесь считать, что это естественный язык и использовать статистические методы. Вероятно, поэтому в файле написано «ISO-8859».
вы можете использовать команду file
файл --mime myfile.text