V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
nbweb
V2EX  ›  Linux

如何在 debian 终端上显示中文?

  •  
  •   nbweb · 2021-10-16 06:52:51 +08:00 · 6754 次点击
    这是一个创建于 1139 天前的主题,其中的信息可能已经有所发展或是发生改变。
    安装了全新的 debian11 之后,发现在 ssh 的终端上,不显示中文了。

    1,在终端里输入 export LC_ALL=zh_CN.utf-8 之后,可以显示,但是关闭终端再打开,又不行了。
    2,在.bashrc 的最后加上 export LC_ALL=zh_CN.utf-8,全部都可以显示了。
    3,locale 显示如下
    root@debian:~# locale
    LANG=
    LANGUAGE=
    LC_CTYPE="zh_CN.utf-8"
    LC_NUMERIC="zh_CN.utf-8"
    LC_TIME="zh_CN.utf-8"
    LC_COLLATE="zh_CN.utf-8"
    LC_MONETARY="zh_CN.utf-8"
    LC_MESSAGES="zh_CN.utf-8"
    LC_PAPER="zh_CN.utf-8"
    LC_NAME="zh_CN.utf-8"
    LC_ADDRESS="zh_CN.utf-8"
    LC_TELEPHONE="zh_CN.utf-8"
    LC_MEASUREMENT="zh_CN.utf-8"
    LC_IDENTIFICATION="zh_CN.utf-8"
    LC_ALL=zh_CN.utf-8

    但是,第 2 条貌似不是正规的做法,有没有在系统里永久改变?默认是英文,但是在终端才显示中文的?第三条显的正规,但是不生效。是不是要重启一下才行?
    16 条回复    2021-10-18 17:16:48 +08:00
    Yadomin
        1
    Yadomin  
       2021-10-16 07:46:36 +08:00 via Android
    dpkg-reconfigure locales
    nbweb
        2
    nbweb  
    OP
       2021-10-16 08:33:12 +08:00
    @Yadomin 添加了,不行
    raysonx
        3
    raysonx  
       2021-10-16 08:38:37 +08:00 via iPad
    怀疑你本地的 ssh 客户端将本地的 LC_*环境变量带到远程了。建议检查本地 ssh_config 文件。
    la9998372
        4
    la9998372  
       2021-10-16 08:54:17 +08:00   ❤️ 1
    hingle
        5
    hingle  
       2021-10-16 09:18:09 +08:00
    nbweb
        6
    nbweb  
    OP
       2021-10-16 09:37:22 +08:00
    @la9998372 用了这个不行,ssh 终端还是不显示中文。

    奇怪,另外一新安装的 debian11 虚拟机是 ok 的。
    skys215
        7
    skys215  
       2021-10-16 09:55:36 +08:00
    有安装中文 /utf8 包吗
    nbweb
        8
    nbweb  
    OP
       2021-10-16 09:56:49 +08:00
    @skys215 要怎么安装?在.bashrc 的最后加上 export LC_ALL=zh_CN.utf-8 就 ok,删了就不行了。
    bao3
        9
    bao3  
       2021-10-16 10:28:34 +08:00 via iPhone
    你的终端也要调整的,并不是只调整 server 端。
    aristolochic
        10
    aristolochic  
       2021-10-16 11:27:13 +08:00   ❤️ 1
    不考虑 ssh 的话(因为你没说你用的是什么),服务端设置 locale 的正确做法是在 locale.conf 写入

    ```
    LANG=zh_CN.UTF-8
    ```

    locale.conf 可以是 /etc/locale.conf 、~/.config/locale.conf 、$XDG_CONFIG_HOME/locale.conf 或 $HOME/.config/locale.conf,依据你希望应用的范围和是否修改了默认 HOME 和 XDG_CONFIG_HOME 而定。

    locale.conf 的变更会在下次登录时生效,要立刻应用新的设置的话,可以运行:

    ``` sh
    $ unset LANG
    $ source /etc/profile.d/locale.sh
    ```

    注意到只设置了 LANG 这一个环境变量,这是因为这个变量的值会覆盖掉所有未设置的 LC_* 变量的值。

    如果你希望做更加细粒度的控制,去看 manpage 。

    你也可以额外设置一个 LANGUAGE,如果上述的 LANG 没有将其设置的话,因为使用 gettext 翻译的软件会按照 LANGUAGE 选择使用的语言。当然现在也不一定,在我常用的 Arch 和 Ubuntu 20.04 中,只设置 LANG 是可以给 LANGUAGE 提供默认值的。

    不建议使用 LC_ALL,这个是为了测试和排错使用的临时值,尤其是它不能出现在 locale.conf 文件中。这个变量的值会覆盖掉 LANG 和所有 LC_* 变量的值,无论它们是否设置。

    ---

    或者运行

    ``` sh
    # localectl set-locale LANG=zh_CN.UTF-8
    ```

    如果有 locale.alias 文件的话,理论上你也可以用别名,但考虑到不是所有系统都有,在此不作展开。
    aristolochic
        11
    aristolochic  
       2021-10-16 11:32:39 +08:00
    另外再提一句,如果你的系统有奇怪的 pam 的话,pam_environment 是有可能覆盖 locale.conf 设置的本地化相关环境变量的。如果有 X 相关的东西的话,那更加有可能被 DE/DM 覆盖,这个就得自己找了,先看看 xinitrc,再看看 DM,再看看 DE 。
    billlee
        12
    billlee  
       2021-10-16 11:49:45 +08:00
    在 ~/.profile 里设置是正规的做法,linux 本来就可以不同用户有不同 locale.
    liuxu
        13
    liuxu  
       2021-10-16 16:25:06 +08:00
    debian 一般默认是安装好了 locale 包的

    1. 查看当前 locale 以及系统支持的语言
    # locale
    # localectl list-localesC.UTF-8
    en_US.UTF-8
    很明显此时你没有 zh_CN.UTF-8

    2. 取消 /etc/locale.gen 中的“zh_CN.UTF8 UTF8”的注释,并让系统加载
    # vim /etc/locale.gen
    # locale-gen

    3. 此时可以看到已经有了 zh_CN.UTF-8
    root@li1604-45:~# localectl list-locales
    C.UTF-8
    en_US.UTF-8
    zh_CN.UTF-8

    4. 使用 zh_CN.UTF-8
    # localectl set-locale zh_CN.UTF-8

    5. 重新 ssh 登录,此时环境变量全部 zh_CN.UTF-8
    root@li1604-45:~# locale
    LANG=zh_CN.UTF-8
    LANGUAGE=
    LC_CTYPE="zh_CN.UTF-8"
    LC_NUMERIC="zh_CN.UTF-8"
    LC_TIME="zh_CN.UTF-8"
    LC_COLLATE="zh_CN.UTF-8"
    LC_MONETARY="zh_CN.UTF-8"
    LC_MESSAGES="zh_CN.UTF-8"
    LC_PAPER="zh_CN.UTF-8"
    LC_NAME="zh_CN.UTF-8"
    LC_ADDRESS="zh_CN.UTF-8"
    LC_TELEPHONE="zh_CN.UTF-8"
    LC_MEASUREMENT="zh_CN.UTF-8"
    LC_IDENTIFICATION="zh_CN.UTF-8"
    LC_ALL=


    6.一般情况你还需要手动设置 LC_ALL,所以在~/.bashrc 里面添加
    LC_ALL=zh_CN.UTF-8

    然后加载
    # source ~/.bashrc
    liuxu
        14
    liuxu  
       2021-10-16 16:27:27 +08:00
    1 中排版有问题,更正一下:

    1. 查看当前 locale 以及系统支持的语言
    # locale
    # localectl list-locales
    C.UTF-8
    en_US.UTF-8
    很明显此时你没有 zh_CN.UTF-8
    ZeroDu
        15
    ZeroDu  
       2021-10-18 10:46:49 +08:00
    同样遇到了,我直接换成英文的了
    cstj0505
        16
    cstj0505  
       2021-10-18 17:16:48 +08:00
    命令行中文觉得有点别扭
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2048 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:17 · PVG 00:17 · LAX 08:17 · JFK 11:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.