当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 10 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : shell脚本中使用iconv转换字符编码的问题
帖子发表于 : 2008-03-06 15:08 
头像

注册: 2007-01-20 22:20
帖子: 43
地址: 深圳
送出感谢: 0 次
接收感谢: 0 次
我的终端字符编码是UTF-8,因工作需要经常从telnet登录到另外一台使用GBK编码的机器。
为了防止登录后终端显示乱码,每次登录前都要手工将编码改为GBK,并在退出登录之后切换回UTF-8,感觉很烦。
请问能否同过脚本完成上面一行的两项工作?
在论坛上搜索到一个介绍iconv做类似工作的贴子,由于不太懂shell脚本没看明白。
哪位大侠帮我详细讲解一下吧。谢谢! :oops:


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-03-06 15:47 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
# 如果不是UTF-8的标题,就转换一下。
[ $? != 0 ] && t=`echo $t|iconv -f GBK -t utf8|tr -d \n`
t=`echo $t|sed 's/|/_/g'`


_________________
● 鸣学


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-03-06 16:03 
头像

注册: 2007-01-20 22:20
帖子: 43
地址: 深圳
送出感谢: 0 次
接收感谢: 0 次
eexpress 写道:
# 如果不是UTF-8的标题,就转换一下。
[ $? != 0 ] && t=`echo $t|iconv -f GBK -t utf8|tr -d \n`
t=`echo $t|sed 's/|/_/g'`


eexpress你好。
如果在登录之前之前将终端编码改成GBK的话,登录之后会在终端上显示如下界面。
若没有改成GBK则其中的中文就都显示为乱码。
我根据你提供的代码写了如下脚本:

#!/bin/bash
# 如果不是UTF-8的标题,就转换一下。
[ $? != 0 ] && t=`echo $t|iconv -f GBK -t utf8|tr -d \n`
t=`echo $t|sed 's/|/_/g'`
telnet 192.168.xx.xx

这样还是不能正常显示中文,请问我这个改法是不是有问题啊。多谢。

┌─────────────
│ 1. xx菜单 |
│ 2. |
│ 3. xx报告菜单 |
│ 4. |
│ 5. xx调整菜单 |
│ 6. |
│ 7. xx菜单 |
│ 8. |
│ 9. xx菜单 |
│10. |
└─────────────
┌────────────-
│Please select a function. |
└────────────


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-03-06 16:54 

注册: 2007-05-13 15:20
帖子: 333
送出感谢: 0 次
接收感谢: 0 次
export LANG=zh_CN.GBK telnet youhost


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-03-07 8:50 
头像

注册: 2007-01-20 22:20
帖子: 43
地址: 深圳
送出感谢: 0 次
接收感谢: 0 次
chasye 写道:
export LANG=zh_CN.GBK telnet youhost


chasye你好。
按照你提供的方法实验了一下,屏幕还是会显示成乱码。
另外export和telnet同时写在一行里是需要用;隔开的。


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2008-03-07 9:07 

注册: 2007-05-13 15:20
帖子: 333
送出感谢: 0 次
接收感谢: 0 次
LANG=zh_CN.GBK telnet youhost
试试 上面的


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2008-03-07 17:23 
头像

注册: 2007-01-20 22:20
帖子: 43
地址: 深圳
送出感谢: 0 次
接收感谢: 0 次
chasye 写道:
LANG=zh_CN.GBK telnet youhost
试试 上面的


chasye你好,我先后尝试了:
1) LANG=zh_CN.GBK telnet host
2) env LANG=zh_CN.GBK telnet host
3) env LC_ALL=zh_CN.GBK telnet host
都不能达到转换终端编码的目的,困惑中 :?


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2008-03-07 17:57 

注册: 2007-05-13 15:20
帖子: 333
送出感谢: 0 次
接收感谢: 0 次
poplarc 写道:
chasye 写道:
LANG=zh_CN.GBK telnet youhost
试试 上面的


chasye你好,我先后尝试了:
1) LANG=zh_CN.GBK telnet host
2) env LANG=zh_CN.GBK telnet host
3) env LC_ALL=zh_CN.GBK telnet host
都不能达到转换终端编码的目的,困惑中 :?


你的locale里有没有zh_CN.GBK啊???

没有就先,试试
添加zh_CN.GBK到locale
再local-gen
再用上面的命令


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2008-03-07 19:57 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
☎ alias |grep LC
alias cn='export LC_ALL=zh_CN.UTF-8'
alias en='export LC_ALL=C'
我一般是这样,重来不去改LANG
cn; ls
编码你自己根据locale修改所需的。


_________________
● 鸣学


页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2008-03-10 16:59 
头像

注册: 2007-01-20 22:20
帖子: 43
地址: 深圳
送出感谢: 0 次
接收感谢: 0 次
chasye, eexpress, 二位好:

我又试了几次,可还是没达到预期效果。
我不太明白系统locale设置和终端编码之间有怎样的联系,
因为我在转换终端编码之前和之后分别查看了一次系统locale设置,结果发现转换编码前后的locale并无不同。
那为什么在终端中直接转换编码之后就不会显示为乱码呢?困惑中……

另外我也在网上搜索了部分有关locale设置的文章,并参照那些文章尝试着进行了一些设置,
目前系统的locale如下:
poplarc@johnathan-dt:~/test/ch08/8.2.4$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=


另外/usr/lib/locales目录下的内容如下:
poplarc@johnathan-dt:/usr/lib/locale$ ll
total 88
drwxr-xr-x 3 root root 4096 2008-03-10 12:18 csb_PL
drwxr-xr-x 3 root root 4096 2008-03-10 12:18 en_AU.utf8
drwxr-xr-x 3 root root 4096 2008-03-10 12:18 en_BW.utf8
drwxr-xr-x 3 root root 4096 2008-03-10 12:18 en_CA.utf8
drwxr-xr-x 3 root root 4096 2008-03-10 12:18 en_DK.utf8
drwxr-xr-x 3 root root 4096 2008-03-10 12:18 en_GB.utf8
drwxr-xr-x 3 root root 4096 2008-03-10 12:18 en_HK.utf8
drwxr-xr-x 3 root root 4096 2008-03-10 12:18 en_IE.utf8
drwxr-xr-x 3 root root 4096 2008-03-10 12:18 en_IN
drwxr-xr-x 3 root root 4096 2008-03-10 12:18 en_NZ.utf8
drwxr-xr-x 3 root root 4096 2008-03-10 12:18 en_PH.utf8
drwxr-xr-x 3 root root 4096 2008-03-10 12:18 en_SG.utf8
drwxr-xr-x 3 root root 4096 2008-03-10 12:18 en_US.utf8
drwxr-xr-x 3 root root 4096 2008-03-10 12:18 en_ZA.utf8
drwxr-xr-x 3 root root 4096 2008-03-10 12:18 en_ZW.utf8
drwxr-xr-x 3 root root 4096 2008-03-10 12:18 fur_IT.utf8
drwxr-xr-x 3 root root 4096 2008-03-10 13:29 zh_CN.gb2312
drwxr-xr-x 3 root root 4096 2008-03-10 12:19 zh_CN.gbk
drwxr-xr-x 3 root root 4096 2008-03-07 10:27 zh_CN.utf8
drwxr-xr-x 3 root root 4096 2008-02-28 10:07 zh_HK.utf8
drwxr-xr-x 3 root root 4096 2008-02-28 10:07 zh_SG.utf8
drwxr-xr-x 3 root root 4096 2008-02-28 10:07 zh_TW.utf8
poplarc@johnathan-dt:/usr/lib/locale$



不知道是否有什么地方被我弄错了,请帮忙看一下吧。
另外有没有locale的详细介绍文章可以推荐?
:shock:


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 10 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译