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 ответов
что значит
locale
вывод команды? Это локаль UTF-8?вы уверены, что ваш терминал установлен для отображения UTF-8? Делает
echo -e '\xe2\x82\xac'
произвести знак € (евро)?локаль у вас даже установлена в системе? Это присутствует в списке, что
locale -a
выходы?какая версия
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 }