如何解决Linux下zip压缩文件文件名乱码问题
Linux系统默认的字符编码是 UTF-8 Windows 是 GBK 编码,不支持UTF8 所以 Linux下 的中文文件名到 Windwos下就成了乱码。 解决办法, 一个是 用英文文件名。 另一个,把Linux系统的文件名转成GBK编码的。 不过这种转换有可能造成信息丢失
文件名在telnet中显示乱码的问题,因为不能重启服务器,执行以下环境变量更改即可中文显示:
代码如下:
export LANG="zh_CNGB18030"
export LANGUAGE="zh_CNGB18030:zh_CNGB2312:zh_CN:en_USUTF-8"
export LC_CTYPE="zh_CNGB18030"
export LC_TIME="en_USUTF-8"
[oracle@localhost dbs]$ ll
total 6256632
-rw-rw---- 1 oracle oinstall 1552 Jul 28 2010 hc_orcldat
-rw-r----- 1 oracle oinstall 12920 May 3 2001 initdwora
-rw-r----- 1 oracle oinstall 8385 Sep 11 1998 initora
-rw-r----- 1 oracle oinstall 2457 Jul 28 2010 initorclora
-rw-r----- 1 oracle oinstall 6390030336 Feb 25 10:32 募路
-rw-rw---- 1 oracle oinstall 24 Jul 28 2010 lkORCL
-rw-r----- 1 oracle oinstall 1536 Sep 9 18:45 orapworcl
-rw-r----- 1 oracle oinstall 10436608 Feb 25 09:46 snapcf_orclf
-rw-r----- 1 oracle oinstall 4608 Feb 24 21:55 spfileorclora
[oracle@localhost dbs]$ export LANG="zh_CNGB18030"
[oracle@localhost dbs]$ export LANGUAGE="zh_CNGB18030:zh_CNGB2312:zh_CN:en_US
UTF-8"
[oracle@localhost dbs]$ export LC_CTYPE="zh_CNGB18030"
[oracle@localhost dbs]$ export LC_TIME="en_USUTF-8"
[oracle@localhost dbs]$ ll
总用量 6256632
-rw-rw---- 1 oracle oinstall 1552 2010-07-28 hc_orcldat
-rw-r----- 1 oracle oinstall 12920 2001-05-03 initdwora
-rw-r----- 1 oracle oinstall 8385 1998-09-11 initora
-rw-r----- 1 oracle oinstall 2457 2010-07-28 initorclora
-rw-rw---- 1 oracle oinstall 24 2010-07-28 lkORCL
-rw-r----- 1 oracle oinstall 1536 Sep 9 18:45 orapworcl
-rw-r----- 1 oracle oinstall 10436608 Feb 25 09:46 snapcf_orclf
-rw-r----- 1 oracle oinstall 4608 Feb 24 21:55 spfileorclora
-rw-r----- 1 oracle oinstall 6390030336 Feb 25 10:37 数据文件的路径
多个环境验证过,证明是行之有效的,希望遇到类似问题的朋友,可以借助以上方法解决您的问题。
1、查看是否安装中文语言包
#locale -a |grep zh_CN
没有输出,则未安装,可先安装
安装完成,查看安装的语言包
#locale -a |grep zh_CN
zh_CN
zh_CNgb18030
zh_CNgb2312
zh_CNgbk
zh_CNutf8
2、修改配置文件
#vim /etc/localeconf
修改:
LANG=zh_CN(可以一一替换已安装的中文包尝试)
重启电脑生效
背景如果Ubuntu Server在安装过程中,选择的是中文(很多新手都会在安装时选择中文,便于上手),这样在完成安装后,系统默认的语言将会是中文zh_CNUTF- 8。但问题是我们安装的是服务器,只需要运行命令行终端,但在终端下无法正常的显示默认中文编码zh_CNUTF-8。由此有以下方法解决
使用SecureCRT客户端软件
直接修改虚拟终端界面配置项目中的字体编码为UTF-8即可。修改方法如下:
选项->会话选项->外观->字符编码->uft-8
修改以后显示中文如下图所示:
原理其实很简单,Ubuntu Server默认的还是zh_CNUTF-8汉字编码,在服务器终端上面还是无法识别汉字,但是在虚拟终端中,经过“编码修正”以后就能够正确显示出来。相当于服务器终端将内容传递给客户端软件,客户端软件通过相应的编码方式进行解码显示中文。因为SecureCRT是安装在中文windows环境下的,而这个环境下的默认编码是GBK,可以识别汉字。那么如何解决服务器端中文乱码的问题呢,其实最好的方法就是干脆将语言环境设置成英文好了。
修改Ubuntu的配置文件/etc/default/locale
将原来的配置内容
LANG="zh_CNUTF-8"
LANGUAGE="zh_CN:zh"
修改为
LANG="en_USUTF-8"
LANGUAGE="en_US:en"
再在终端下运行:
$ locale-gen -en_US:en
注销或重启后,Ubuntu Server真正服务器实体终端就恢复成了英文的语言环境。所以,此方法不是真正意义上的中文化,而是恢复英文的默认编码
修改完以后,再次查询ip地址,可以发现就是英文环境了。
通过工具
这种方法适用于知道备份的字符集
11 convmv
convmv -f GBK -t utf-8 --notest filename
把gbk的编码转成utf-8
12 enca
enca -L zh_CN -x UTF-8 filename
将文件编码转换为UTF-8编码
13 iconv
iconv -f gbk -t utf-8 -o outfilename infilename
-f为原来的编码方式,-t 为输出文件的编码方式, -o表示输出文件名,这利用outfile表示,最后跟上要更改编码方式的文件名sourcefile
通过打包
这种方法适用于i18n 和 locale 不一致时。
具体如下:
tar -czvf /tmp/<yourtartargz> /
上面的命令会把整个目录打个包, 放在 /tmp 目录下。 然后, 你再copy了出去就可以了。
注意:备份盘,如果是USB或者移动硬盘的话,挂载时,要加 "-t 格式",来指定格式
客户端连接Linux服务器中文显示乱码,如下图所示:
字符乱码问题 :如果服务器本身支持中文,只是客户端显示乱码,通常就是
客户端字符集与服务器字符集不一致造成的。把客户端字符集改成服务器字符集就可以解决的。但是像 SSHSecureShellClient-329exe 客户端没有设置字符集的地方,就需要把字符集改为zh_CNGB18030才能正确显示中文:
export LC_CTYPE=zh_CNGB18030
export LC_ALL=zh_CNGB18030
export LANG=zh_CNGB18030
设置完就解决了客户端连接Linux系统中文显示乱码的问题。
注:每次使用客户端连接Linux服务器时,都需要手动改一下字符集。
0条评论