代码之家  ›  专栏  ›  技术社区  ›  dan

LESSCHARSET=utf-8 less似乎不起作用

  •  6
  • dan  · 技术社区  · 16 年前

    我正在尝试在中查看UTF-8文本文件/流 less ,即使我这样调用它:

    cat file | LESSCHARSET=utf-8 less
    

    <F4>

    使用UTF-8编码读取vim中的相同文本不会带来任何问题。所以我认为我调用的方式有问题 较少的 .

    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=
    

    $ 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 回复  |  直到 16 年前
        1
  •  9
  •   Teddy    16 年前
    1. 这是什么意思 locale 命令输出?它是UTF-8语言环境吗?

    2. 终端 是否设置为显示UTF-8? 做 echo -e '\xe2\x82\xac' 出示(欧元)标志?

    3. 在列表中显示 locale -a 输出?

    4. 什么版本的 less less --version ) , 真正地 旧版本甚至不支持 LESSCHARSET . 这 较少的 版本382,如果区域设置为

        2
  •  5
  •   Beryllium asifrc    13 年前

    我猜你的文件不是UTF8而是ISO8859(是<F4>字符应该是“”?)

    LANG=en_US.ISO-8859-1 xterm . 然后验证区域设置(的输出) locale 应该是类似en_US.ISO-8859-1)的内容。然后使用less查看文件。它显示正确吗?

    注意,仅仅使用它是不够的 LESSCHARSET=iso8859 没有启动新的终端。 LESSCHARSET

        3
  •  3
  •   German Lashevich Not_a_Golfer    5 年前

    在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)
    

    Here 我找到了一个字符集列表:

    { "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 }
    
        4
  •  2
  •   Greg Marks    12 年前

    试试这个命令 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 .

        5
  •  0
  •   x545    7 年前

    为我工作:

    f='path/to/file/filename.extension'; LESSCHARSET=`file -b --mime-encoding ${f}|tr '[:lower:]' '[:upper:]'` less ${f}
    
        6
  •  0
  •   Jasper-M    6 年前

    less -r 为我正确显示文件。

     -r or --raw-control-chars
                  Causes "raw" control characters to be displayed.  The default is
                  to  display  control  characters  using  the caret notation; for
                  example, a control-A (octal 001) is displayed as "^A".  Warning:
                  when the -r option is used, less cannot keep track of the actual
                  appearance of the screen (since this depends on how  the  screen
                  responds to each type of control character).  Thus, various dis-
                  play problems may result, such as long lines being split in  the
                  wrong place.