Если Вы не хотите смешать нижний регистр и верхний регистр, установите свою локаль на C
, который берет символы в их числовом порядке. _
падения между верхним регистром и нижним регистром.
$ LC_COLLATE=C ls
BAR FOO _score _under hello world
$ LC_COLLATE=en_US ls
BAR FOO hello _score _under world
Настройки локали LC_MESSAGES
(язык сообщений об ошибках), LC_CTYPE
(наборы символов) и LC_TIME
(формат даты и времени), очень полезны. LC_COLLATE
и LC_NUMERIC
обычно больше проблемы, чем они стоят, я не рекомендую установить их. Надлежащая лексикографическая сортировка более сложна, чем LC_COLLATE
как предполагается, указывает, и это может вызвать все виды странных поведений при использовании диапазонов символов в регулярных выражениях. LC_NUMERIC
является главным образом косметическим, кроме тех случаев, когда что-то идет ужасно неправильно, потому что некоторая программа произвела число с десятичным разделителем кроме .
.
Ваша оболочка может отобразить диакритические знаки и т.д., потому что она, вероятно, использует UTF-8. Так как рассматриваемый файл является другим кодированием, less
more
и cat
попытка состоит в том, чтобы считать его как UTF и сбой. Можно проверить текущее кодирование
echo $LANG
У Вас есть два варианта, можно или изменить кодировку по умолчанию или изменить файл на UTF-8. Для изменения кодирования откройте терминал и тип
export LANG="fr_FR.ISO-8859"
Например:
$ echo $LANG
en_US.UTF-8
$ cat foo.txt
J'ai mal � la t�te, c'est chiant!
$ export LANG="fr_FR.ISO-8859"
$ xterm <-- open a new terminal
$ cat foo.txt
J'ai mal à la tête, c'est chiant!
Если Вы используете gnome-terminal
или подобный, Вы, возможно, должны активировать кодирование, например, для terminator
щелкните правой кнопкой и:
Для gnome-terminal
:
Ваша другая (лучшая) опция состоит в том, чтобы изменить кодирование файла:
$ cat foo.txt
J'ai mal � la t�te, c'est chiant!
$ iconv -f ISO-8859-1 -t UTF-8 foo.txt > bar.txt
$ cat bar.txt
J'ai mal à la tête, c'est chiant!
Кодировки символов ISO 8858 немного устарели для систем Linux. Ваша целая система Linux, вероятно, использует UTF-8 полностью. Включая Ваш эмулятор терминала и Вашу оболочку.
Как бы то ни было. cat
, grep
и less
не делайте никакого преобразования кодирования, они будут рассматривать Ваш ISO-8859/latin1 файл как UTF-8, который не будет работать.
Если emacs может отобразить их, это - потому что это пытается автоматически обнаружить используемое кодирование и по-видимому успешно выполниться. Скажите emacs сохранить файл как UTF-8, и Вы сможете использовать cat
/grep
/ безотносительно на нем.
Если Вы знаете точную кодировку символов (ISO 8859 является набором их, необходимо знать точный: ISO-8859-1 или ISO-8859-15 или хуже), можно также преобразовать файлы из командной строки:
iconv --from-code ISO-8859-15 your_file -o your_file_as_utf8
CAT, Больше и Меньше просто делает их задание отображения файла. Перевод между кодировкой не находится в их должностной инструкции. Кодирование новых строк не является проблемой, поскольку CRLF отображен точно так же, как нормаль, заканчивающая LF, но Ваш терминал, вероятно, ожидает UTF-8-encoded текст, который является фактическим стандартом в наше время.
Luit переводит между поддерживаемой кодировкой и UTF-8. Вы говорите Luit который, кодируя для перевода путем установки LC_CTYPE
переменная среды или с -encoding
опция. Например, для отображения латинского 1 (иначе ISO 8859-1) файл:
LC_CTYPE=en_US luit less somefile
luit -encoding ISO8859-1 less somefile
Если файл находится в некотором экзотическом кодировании, которое не поддерживает Luit, можно передать его по каналу через программу переводчика. Iconv поддерживает много кодировок.
iconv -f latin1 somefile
iconv -f latin1 somefile | less