LESSCHARSET=utf-8 less, похоже, не работает

Я пытаюсь просмотреть текстовый файл/поток 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

4 ответов


  1. что значит locale вывод команды? Это локаль UTF-8?

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

  3. локаль у вас даже установлена в системе? Это присутствует в списке, что locale -a выходы?

  4. какая версия less вы используете? (Беги!--4--> найти из.) действительно, действительно старые версии даже не поддерживают LESSCHARSET. Этот это менее вероятно, потому что у меня есть система Debian "sarge" с less версия 382, и ей даже не нужен LESSCHARSET если локаль установлены правильно.


Я предполагаю, что ваш файл не UTF8, а скорее ISO8859. (Символ должен быть""?)

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

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


попробуйте команду file file.txt.  Если, например, выводится "ISO-8859 English text", то измените кодировку файла с 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.


в 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 }