LESSCHARSET = utf-8 меньше не работает - PullRequest
6 голосов
/ 22 января 2010

Я пытаюсь просмотреть текстовый файл / поток UTF-8 в less, и даже если я вызываю его так:

cat file | LESSCHARSET=utf-8 less

символы UTF-8, не совместимые с ASCII, отображаются неправильно. Вместо этого их шестнадцатеричные значения выделены в скобках, например <F4>.

Чтение того же текста в vim с кодировкой UTF-8 не представляет проблем. Поэтому я думаю, что что-то не так с тем способом, которым я вызываю less.

Мой locale вывод следующий

LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL=

Моя меньшая версия установлена ​​XCode на OSX Leopard:

$ less --version | sed 's/^/    /'
less 394
Copyright (C) 1984-2005 Mark Nudelman

less comes with NO WARRANTY, to the extent permitted by law.
For information about the terms of redistribution, 
see the file named README in the less distribution.
Homepage: http://www.greenwoodsoftware.com/less

locale -a | grep US | sed 's/^/ /' выводит следующее:

en_AU.US-ASCII
en_CA.US-ASCII
en_GB.US-ASCII
en_NZ.US-ASCII
en_US
en_US.ISO8859-1
en_US.ISO8859-15
en_US.US-ASCII
en_US.UTF-8

Ответы [ 5 ]

8 голосов
/ 22 января 2010
  1. Что выводит команда locale? Это локаль UTF-8?

  2. Вы уверены, что ваш терминал настроен на отображение UTF-8? echo -e '\xe2\x82\xac' производит знак евро (евро)?

  3. Установленный языковой стандарт установлен в системе? Это присутствует в списке, который выводит locale -a?

  4. Какую версию less вы используете? (Запустите less --version, чтобы узнать.) Действительно , действительно старые версии даже не поддерживали LESSCHARSET. это с меньшей вероятностью, потому что у меня есть система Debian sarge с less версия 382, ​​и ей даже не нужен LESSCHARSET, если локаль установлен правильно.

5 голосов
/ 04 ноября 2011

Я предполагаю, что ваш файл - не UTF8, а ISO8859. (Предполагается, что символ должен быть 'ô'?)

Начните xterm с LANG=en_US.ISO-8859-1 xterm. Затем проверьте локаль (вывод locale должен выглядеть примерно так: en_US.ISO-8859-1). Затем используйте меньше, чтобы просмотреть файл. Правильно ли отображается?

Обратите внимание, что недостаточно просто использовать LESSCHARSET=iso8859 без запуска нового терминала. LESSCHARSET меньше говорит о том, что терминал может интерпретировать iso8859, но ваш терминал, вероятно, отображает UTF8, поскольку знак евро отображается правильно. Но, поскольку \ xf4 не является допустимым символом utf8, терминал, вероятно, покажет что-то вроде ' '.

2 голосов
/ 20 февраля 2014

Попробуйте команду file file.txt. Если, например, выводом является «Английский текст ISO-8859», измените кодировку файла с ISO-8859 на UTF-8 с помощью команды iconv -f ISO-8859-1 -t UTF-8 -o testfile.txt file.txt. Если less testfile.txt отображается правильно, закончите с mv testfile.txt file.txt.

1 голос
/ 22 мая 2017

В Mac OS кодировка должна быть в верхнем регистре:

bash-4.4$ less --version
less 458 (POSIX regular expressions)
Copyright (C) 1984-2012 Mark Nudelman

bash-4.4$ LESSCHARSET=cp1251 less
invalid charset name

bash-4.4$ LESSCHARSET=CP1251 less
Missing filename ("less --help" for help)

Здесь Я нашел список кодировок:

{ "ascii",          NULL,       "8bcccbcc18b95.b" },
{ "utf-8",          &utf_mode,  "8bcccbcc18b95.b126.bb" },
{ "iso8859",        NULL,       "8bcccbcc18b95.33b." },
{ "latin3",         NULL,       "8bcccbcc18b95.33b5.b8.b15.b4.b12.b18.b12.b." },
{ "arabic",         NULL,       "8bcccbcc18b95.33b.3b.7b2.13b.3b.b26.5b19.b" },
{ "greek",          NULL,       "8bcccbcc18b95.33b4.2b4.b3.b35.b44.b" },
{ "greek2005",      NULL,       "8bcccbcc18b95.33b14.b35.b44.b" },
{ "hebrew",         NULL,       "8bcccbcc18b95.33b.b29.32b28.2b2.b" },
{ "koi8-r",         NULL,       "8bcccbcc18b95.b." },
{ "KOI8-T",         NULL,       "8bcccbcc18b95.b8.b6.b8.b.b.5b7.3b4.b4.b3.b.b.3b." },
{ "georgianps",     NULL,       "8bcccbcc18b95.3b11.4b12.2b." },
{ "tcvn",           NULL,       "b..b...bcccbccbbb7.8b95.b48.5b." },
{ "TIS-620",        NULL,       "8bcccbcc18b95.b.4b.11b7.8b." },
{ "next",           NULL,       "8bcccbcc18b95.bb125.bb" },
{ "dos",            NULL,       "8bcccbcc12bc5b95.b." },
{ "windows-1251",   NULL,       "8bcccbcc12bc5b95.b24.b." },
{ "windows-1252",   NULL,       "8bcccbcc12bc5b95.b.b11.b.2b12.b." },
{ "windows-1255",   NULL,       "8bcccbcc12bc5b95.b.b8.b.5b9.b.4b." },
{ "ebcdic",         NULL,       "5bc6bcc7bcc41b.9b7.9b5.b..8b6.10b6.b9.7b9.8b8.17b3.3b9.7b9.8b8.6b10.b.b.b." },
{ "IBM-1047",       NULL,       "4cbcbc3b9cbccbccbb4c6bcc5b3cbbc4bc4bccbc191.b" },
{ NULL, NULL, NULL }

и их псевдонимы:

{ "UTF-8",          "utf-8" },
{ "ANSI_X3.4-1968", "ascii" },
{ "US-ASCII",       "ascii" },
{ "latin1",         "iso8859" },
{ "ISO-8859-1",     "iso8859" },
{ "latin9",         "iso8859" },
{ "ISO-8859-15",    "iso8859" },
{ "latin2",         "iso8859" },
{ "ISO-8859-2",     "iso8859" },
{ "ISO-8859-3",     "latin3" },
{ "latin4",         "iso8859" },
{ "ISO-8859-4",     "iso8859" },
{ "cyrillic",       "iso8859" },
{ "ISO-8859-5",     "iso8859" },
{ "ISO-8859-6",     "arabic" },
{ "ISO-8859-7",     "greek" },
{ "IBM9005",        "greek2005" },
{ "ISO-8859-8",     "hebrew" },
{ "latin5",         "iso8859" },
{ "ISO-8859-9",     "iso8859" },
{ "latin6",         "iso8859" },
{ "ISO-8859-10",    "iso8859" },
{ "latin7",         "iso8859" },
{ "ISO-8859-13",    "iso8859" },
{ "latin8",         "iso8859" },
{ "ISO-8859-14",    "iso8859" },
{ "latin10",        "iso8859" },
{ "ISO-8859-16",    "iso8859" },
{ "IBM437",         "dos" },
{ "EBCDIC-US",      "ebcdic" },
{ "IBM1047",        "IBM-1047" },
{ "KOI8-R",         "koi8-r" },
{ "KOI8-U",         "koi8-r" },
{ "GEORGIAN-PS",    "georgianps" },
{ "TCVN5712-1",     "tcvn" },
{ "NEXTSTEP",       "next" },
{ "windows",        "windows-1252" }, /* backward compatibility */
{ "CP1251",         "windows-1251" },
{ "CP1252",         "windows-1252" },
{ "CP1255",         "windows-1255" },
{ NULL, NULL }
0 голосов
/ 21 мая 2019

Работало у меня:

f='path/to/file/filename.extension'; LESSCHARSET=`file -b --mime-encoding ${f}|tr '[:lower:]' '[:upper:]'` less ${f}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...