通过终端的 通过终端的命令行 与 GUI,查询 语言字符编码,为什么不一样呢?谢谢!

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
davew
帖子: 5
注册时间: 2023-03-09 11:48
联系:

通过终端的 通过终端的命令行 与 GUI,查询 语言字符编码,为什么不一样呢?谢谢!

#1

帖子 davew » 2023-03-09 11:55

Hi, 请教个也许很初级的问题:

在一个Ubuntu 64位的桌面,打开终端后,通过图形化菜单( 终端 - 设定字符编码 ),可以列出多种中文语言编码,也能选择GB2312;
而在终端的命令行里执行locale -a|grep zh_CN,却只能列出一种语言字符编码:zh_CN.utf8。这就导致无法在命令行里,设置语言编码为GB2312.

请问在GUI菜单里列出的可选语言字符编码如GB2312,为什么在命令行里却查询不到?

谢谢!
头像
astolia
论坛版主
帖子: 6506
注册时间: 2008-09-18 13:11

Re: 通过终端的 通过终端的命令行 与 GUI,查询 语言字符编码,为什么不一样呢?谢谢!

#2

帖子 astolia » 2023-03-09 14:10

因为这两个本来就不是一个层面的东西。locale列出的本质上是环境变量,而终端上的选项仅对自己接收到的输出起效
编辑/etc/locale.gen,把需要的编码取消注释,再运行sudo locale-gen,之后就能看到了
davew
帖子: 5
注册时间: 2023-03-09 11:48
联系:

Re: 通过终端的 通过终端的命令行 与 GUI,查询 语言字符编码,为什么不一样呢?谢谢!

#3

帖子 davew » 2023-03-09 14:27

astolia 写了: 2023-03-09 14:10 因为这两个本来就不是一个层面的东西。locale列出的本质上是环境变量,而终端上的选项仅对自己接收到的输出起效
编辑/etc/locale.gen,把需要的编码取消注释,再运行sudo locale-gen,之后就能看到了
谢谢同学这么快的回复!

看了这个locale.gen里只有两行 zh_CN.UTF-8 与 en_US.UTF-8,还是没有 GB2312的!
davew
帖子: 5
注册时间: 2023-03-09 11:48
联系:

Re: 通过终端的 通过终端的命令行 与 GUI,查询 语言字符编码,为什么不一样呢?谢谢!

#4

帖子 davew » 2023-03-09 14:51

纳闷的是,locale列出的环境变量里,可选的语言字符编码都没有GB2312等等,而为什么菜单的设置列表里可选项却有?

其实我们想实现的是,用户每次打开终端后,能像在菜单里手动选择 GB2312 一样选定这个字符编码;只是希望通过shell自动实现而无需用户手动操作。接下来来执行的程序,要求的是GB2312编码支持。
而且,不想一次性改变这个编码,因为担心对其他既有程序造成负面影响。

谢谢!
头像
astolia
论坛版主
帖子: 6506
注册时间: 2008-09-18 13:11

Re: 通过终端的 通过终端的命令行 与 GUI,查询 语言字符编码,为什么不一样呢?谢谢!

#5

帖子 astolia » 2023-03-09 17:58

davew 写了: 2023-03-09 14:27 看了这个locale.gen里只有两行 zh_CN.UTF-8 与 en_US.UTF-8,还是没有 GB2312的!
这说明你的ubuntu环境不是原版,而是某种修改版。原版会在安装时将/usr/share/i18n/SUPPORTED中的locale写入到/etc/locale.gen
你把/usr/share/i18n/SUPPORTED中需要的locale加入到/etc/locale.gen就行了
davew
帖子: 5
注册时间: 2023-03-09 11:48
联系:

Re: 通过终端的 通过终端的命令行 与 GUI,查询 语言字符编码,为什么不一样呢?谢谢!

#6

帖子 davew » 2023-03-09 18:03

astolia 写了: 2023-03-09 17:58
davew 写了: 2023-03-09 14:27 看了这个locale.gen里只有两行 zh_CN.UTF-8 与 en_US.UTF-8,还是没有 GB2312的!
这说明你的ubuntu环境不是原版,而是某种修改版。原版会在安装时将/usr/share/i18n/SUPPORTED中的locale写入到/etc/locale.gen
你把/usr/share/i18n/SUPPORTED中需要的locale加入到/etc/locale.gen就行了
你说的对,其麒麟版。按你说的我试试。 :Haha
头像
astolia
论坛版主
帖子: 6506
注册时间: 2008-09-18 13:11

Re: 通过终端的 通过终端的命令行 与 GUI,查询 语言字符编码,为什么不一样呢?谢谢!

#7

帖子 astolia » 2023-03-09 18:48

davew 写了: 2023-03-09 14:51 纳闷的是,locale列出的环境变量里,可选的语言字符编码都没有GB2312等等,而为什么菜单的设置列表里可选项却有?
我上面已经提过了,这是两个不同层面的东西。环境变量是给glibc库用的,也就是依赖glibc的程序自身在调用glibc的相关字符串函数时就已经自动处理了。而终端的菜单项,是让终端程序将其对应shell的文本输出在显示之前进行转码。两者是相互独立的处理。
davew 写了: 2023-03-09 14:51 其实我们想实现的是,用户每次打开终端后,能像在菜单里手动选择 GB2312 一样选定这个字符编码;只是希望通过shell自动实现而无需用户手动操作。接下来来执行的程序,要求的是GB2312编码支持。
而且,不想一次性改变这个编码,因为担心对其他既有程序造成负面影响。
这种需求最简单也最常见的处理方式,就是弄个wrapper脚本来设置环境变量。
比如你的程序的可执行文件是/usr/bin/abc,那么将其改个名叫/usr/bin/abc.bin,另外建立一个shell脚本/usr/bin/abc,在里面设置相关环境变量后再调用实际的可执行文件

代码: 全选

#!/bin/sh
export XXX=YYY
export XYZ=ABC
exec /usr/bin/abc.bin "$@"
davew
帖子: 5
注册时间: 2023-03-09 11:48
联系:

Re: 通过终端的 通过终端的命令行 与 GUI,查询 语言字符编码,为什么不一样呢?谢谢!

#8

帖子 davew » 2023-03-10 9:21

astolia 写了: 2023-03-09 18:48
davew 写了: 2023-03-09 14:51 纳闷的是,locale列出的环境变量里,可选的语言字符编码都没有GB2312等等,而为什么菜单的设置列表里可选项却有?
我上面已经提过了,这是两个不同层面的东西。环境变量是给glibc库用的,也就是依赖glibc的程序自身在调用glibc的相关字符串函数时就已经自动处理了。而终端的菜单项,是让终端程序将其对应shell的文本输出在显示之前进行转码。两者是相互独立的处理。
davew 写了: 2023-03-09 14:51 其实我们想实现的是,用户每次打开终端后,能像在菜单里手动选择 GB2312 一样选定这个字符编码;只是希望通过shell自动实现而无需用户手动操作。接下来来执行的程序,要求的是GB2312编码支持。
而且,不想一次性改变这个编码,因为担心对其他既有程序造成负面影响。
这种需求最简单也最常见的处理方式,就是弄个wrapper脚本来设置环境变量。
比如你的程序的可执行文件是/usr/bin/abc,那么将其改个名叫/usr/bin/abc.bin,另外建立一个shell脚本/usr/bin/abc,在里面设置相关环境变量后再调用实际的可执行文件

代码: 全选

#!/bin/sh
export XXX=YYY
export XYZ=ABC
exec /usr/bin/abc.bin "$@"
嗯嗯,谢谢版主,经验丰富!
本来就是打算在脚本里实现export LANG=的,只是麒麟里虽然疑似已有GB2312支持(终端的GUI里可选也能设置),但是可能是由于etc那个配置文件里缺少,导致在命令行/脚本里设置不了。
这就按照你的指点试试。再次感谢!
simonx
帖子: 1
注册时间: 2023-03-10 11:49
系统: Linux

Re: 通过终端的 通过终端的命令行 与 GUI,查询 语言字符编码,为什么不一样呢?谢谢!

#9

帖子 simonx » 2023-03-10 13:27

谢谢两位分享,我也遇到过同样的问题,刚按Astoria提的方法做了,还是显示不了中文
头像
astolia
论坛版主
帖子: 6506
注册时间: 2008-09-18 13:11

Re: 通过终端的 通过终端的命令行 与 GUI,查询 语言字符编码,为什么不一样呢?谢谢!

#10

帖子 astolia » 2023-03-11 13:40

simonx 写了: 2023-03-10 13:27 谢谢两位分享,我也遇到过同样的问题,刚按Astoria提的方法做了,还是显示不了中文
因为你遇到的不是同样的问题,最多只是相似的症状。把你用的程序、运行的环境、出现的错误单独发一帖详细说清楚
回复