Мне нужно найти кодировку всех файлов, которые размещены в каталоге. Есть ли способ найти используемую кодировку?
Команда file
не может сделать это.
Интересующая меня кодировка: ISO-8859-1. Если кодировка является чем-то еще, я хочу переместить файл в другой каталог.
apropos encoding
. Он ищет названия и описания всех справочных страниц. Когда я делаю это на моей машине, я вижу 3 инструментов , которые могли бы помочь мне, судя по их описаниям:chardet
,chardet3
,chardetect3
. Затем,man chardet
прочитав man-страницу, вы узнаете, чтоchardet
мне нужна именно эта утилита.us-ascii
, но после добавления строки китайского комментария это становитсяutf-8
.file
можно узнать кодировку, прочитав содержимое файла и угадать.Ответы:
Похоже, вы ищете
enca
. Он может угадывать и даже конвертировать между кодировками. Просто посмотрите на справочную страницу .Или, если это не удалось, используйте
file -i
(linux) илиfile -I
(osx). Это выведет информацию MIME-типа для файла, которая также будет включать кодировку набора символов. Я тоже нашел для этого справочную страницу :)источник
enca
кажется, совершенно бесполезен для анализа файла, написанного на английском языке, но если вы что-то просматриваете на эстонском языке, это может решить все ваши проблемы. Очень полезный инструмент, который ... </Если вы хотите сделать это для нескольких файлов
источник
Do not prepend filenames to output lines
file -b --mime-encoding
выводит только кодировку charsetuchardet - библиотека детекторов кодирования, портированная из Mozilla.
Использование:
Различные дистрибутивы Linux (Debian / Ubuntu, OpenSuse-packman, ...) предоставляют двоичные файлы.
источник
sudo apt-get install uchardet
настолько легко, что я решил не беспокоиться об этом ...uchardet
имеет большое преимущество по сравнениюfile
с темenca
, что анализирует весь файл (только что попробованный с файлом 20 ГБ), а не только начало.Вот пример сценария с использованием файлов -I и iconv, который работает на MacOsX. Для вашего вопроса вам нужно использовать mv вместо iconv
источник
file -b --mime-encoding
выводит только кодировку, так что вы можете избежать обработки всехЭто действительно трудно определить, является ли это iso-8859-1. Если у вас есть текст только с 7-битными символами, который также может быть iso-8859-1, но вы не знаете. Если у вас есть 8-битные символы, то символы верхнего региона существуют и в кодировках заказа. Поэтому вам придется использовать словарь, чтобы лучше угадать, какое это слово, и определить, от какой буквы это должно быть. Наконец, если вы обнаружите, что это может быть utf-8, чем вы уверены, что это не iso-8859-1
Кодирование - одна из самых сложных вещей, потому что вы никогда не знаете, ничего не говорит вам
источник
В Debian вы также можете использовать
encguess
:источник
uchardet
в Ubuntu, и он сказал мне, что мой файл былWINDOWS-1252
. Я знаю, что это было неправильно, потому что я сохранил это как UTF-16 с Кейт, чтобы проверить. Однако,encguess
угадайте правильно, и он был предварительно установлен в Ubuntu 19.04.Чтобы преобразовать кодировку из 8859 в ASCII:
источник
С Python вы можете использовать модуль chardet: https://github.com/chardet/chardet
источник
Это не то, что вы можете сделать безошибочно. Одной из возможностей будет проверка каждого символа в файле, чтобы убедиться, что он не содержит символов в диапазонах
0x00 - 0x1f
или0x7f -0x9f
, но, как я уже сказал, это может быть верно для любого количества файлов, в том числе , по меньшей мере , одного другого варианта ISO8859.Другой возможностью является поиск определенных слов в файле на всех поддерживаемых языках и возможность их найти.
Так, например, найдите эквивалент английского «и», «но», «к», «of» и т. Д. На всех поддерживаемых языках 8859-1 и посмотрите, есть ли у них большое количество вхождений в пределах файл.
Я не говорю о буквальном переводе, таком как:
хотя это возможно Я говорю об общих словах на целевом языке (насколько я знаю, в исландском языке нет слова "и" - вам, вероятно, придется использовать их слово для "рыбы" [извините, это немного стереотипно, я не имею в виду любое нарушение, просто иллюстрирующее точку зрения]).
источник
Я знаю, что вы заинтересованы в более общем ответе, но то, что хорошо в ASCII, обычно хорошо в других кодировках. Вот строка Python, чтобы определить, является ли стандартный ввод ASCII. (Я почти уверен, что это работает в Python 2, но я тестировал его только на Python 3.)
источник
Если вы говорите о XML-файлах (ISO-8859-1), XML-объявление внутри них определяет кодировку:
<?xml version="1.0" encoding="ISO-8859-1" ?>
так что вы можете использовать регулярные выражения (например, с
perl
), чтобы проверить каждый файл на предмет такой спецификации.Более подробную информацию можно найти здесь: Как определить кодировку текстового файла .
источник
В PHP вы можете проверить, как показано ниже:
Указание списка кодировки явно:
Более точные "mb_list_encodings":
Здесь, в первом примере, вы можете видеть, что я поместил список кодировок (определите порядок списков), которые могут совпадать. Чтобы получить более точный результат, вы можете использовать все возможные кодировки с помощью: mb_list_encodings ()
Обратите внимание, что функции mb_ * требуют php-mbstring
источник
В Cygwin это выглядит так, как будто у меня работает:
Пример:
Вы можете передать это в awk и создать команду iconv для преобразования всего в utf8 из любой исходной кодировки, поддерживаемой iconv.
Пример:
источник
Вы можете извлечь кодировку одного файла с помощью команды file. У меня есть файл sample.html с:
sample.html: документ HTML, текст в кодировке UTF-8 Unicode с очень длинными строками
HTML-документ, текст в кодировке UTF-8 Unicode, с очень длинными строками
текст / html; кодировка = UTF-8
UTF-8
источник
Я использую следующий скрипт для
,
источник
с помощью этой команды:
Вы можете перечислить все файлы в каталоге и подкаталогах и соответствующую кодировку.
источник
С Perl используйте Encode :: Detect.
источник