jar包在linux上运行为乱码,java soket程序在Redhat Linux 5上运行汉字乱码.急...................

这是我用的linux的版本信息:

LSB Version:    :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch

Distributor ID: RedHatEnterpriseServer

Description:    Red Hat Enterprise Linux Server release 5 (Tikanga)

Release:        5

Codename:       Tikanga

我开发了个java soket程序,在这上面运行,这个系统的字符集我已经设置成中文了,设置如下:

#LANG="zh_CN.UTF-8"

LANG="zh_CN.GB18030"

LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN:zh_CN.UTF-8"

SUPPORTED="zh_CN.GB18030:zh_CN:zh:zh_CN.UTF-8:en_US.UTF-8:en_US:en"

SYSFONT="lat0-sun16"

SYSFONTACM="8859-15"

我的程序运行所在的用户也设置成中文了,下面是.bash_profile的内容

# .bash_profile

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

. ~/.bashrc

fi

# User specific environment and startup programs

ORACLE_BASE=/u01/app/oracle;

ORACLE_HOME=$ORACLE_BASE/product/8.1.7;

JAVA_HOME=/usr/java/jdk1.6.0_10

PATH=:$PATH:.:$JAVA_HOME/bin:$HOME/bin:$ORACLE_HOME/bin:$ORACLE_HOME/precomp/pub

lic

CLASSPATH=.:/usr/java/jdk1.6.0_10/lib/dt.jar:/usr/java/jdk1.6.0_10/lib/tools.jar

:/home/jserver/ExtLib/axis-ant.jar:/home/jserver/ExtLib/jaxrpc.jar:/home/jserver

/ExtLib/ojdbc14.jar:/home/jserver/ExtLib/axis.jar:/home/jserver/ExtLib/jdom.jar:

/home/jserver/ExtLib/saaj.jar:/home/jserver/ExtLib/commons-discovery-0.2.jar:/ho

me/jserver/ExtLib/log4j-1.2.8.jar:/home/jserver/ExtLib/wsdl4j-1.5.1.jar:/home/js

erver/ExtLib/commons-logging-1.0.4.jar:/home/jserver/ExtLib/xercesImpl.jar:/home

/jserver/ExtLib/mailapi.jar:/home/jserver/ExtLib/activation.jar

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/home/netgate/public/lib:

NLS_LANG=american_america.zhs16gbk;

LANG=zh_CN.GB18030

unset USERNAME

然后我写了个三个shell文件,来执行我的程序,一个是运行,一个停止

start.sh运行的

# User specific environment and startup programs

CLASSPATH=.:/usr/java/jdk1.6.0_10/lib/dt.jar:/usr/java/jdk1.6.0_10/lib/tools.jar

:/home/jserver/ExtLib/axis-ant.jar:/home/jserver/ExtLib/jaxrpc.jar:/home/jserver

/ExtLib/ojdbc14.jar:/home/jserver/ExtLib/axis.jar:/home/jserver/ExtLib/jdom.jar:

/home/jserver/ExtLib/saaj.jar:/home/jserver/ExtLib/commons-discovery-0.2.jar:/ho

me/jserver/ExtLib/log4j-1.2.8.jar:/home/jserver/ExtLib/wsdl4j-1.5.1.jar:/home/js

erver/ExtLib/commons-logging-1.0.4.jar:/home/jserver/ExtLib/xercesImpl.jar

PATH=:$PATH:/usr/java/jdk1.6.0_10/bin:$HOME/bin

LANG=zh_CN.GB18030

export PATH CLASSPATH LANG

unset USERNAME

cd /home/jserver

java jserver.JServer >/dev/null &

stop.sh停止的

i=`ps -ef |grep jserver.JServer|grep -v grep|awk '{print $2}'`

echo $i

kill -9 $i

echo stop ok!!

restart.sh调用以上两个shell重启程序

sh .bash_profile

/home/jserver/stop.sh

/home/jserver/start.sh

#echo $LANG

现在的情况是,手动执行Stop.sh停掉程序,再用start.sh启动程序,一切正常,汉字没有乱码.但使用crontab调用restart.sh重启程序,汉字就是乱码码(是问号"?").

我这个程序在好几台这样的机器上运行,上面的linux系统和这个是一样的.但就没有出现这种情况.

嗯,有一点这台机器和别的不同,就是在切换用户时,输入号令的提示是汉字的,不是英文的password,不知和这个有关没

|

也可以再 restart.sh 中重新设置 bash 需要的环境变量...

crontab是linux下面用于定时执行的例程,基本语法很简单。但是需要注意的是:crontab中没有设定环境变量。

比如:我的程序中需要设置环境为:

export LANG=zh_CN.gbk

export LC_ALL=zh_CN.gbk。

本身系统的locale已经为zh_CN.gbk了,但是在执行crontab例程的时候,在需要执行的bash中还要设置一下locale。比如:每隔5分钟执行一次check.sh。

*/5 * * * * check.sh

check.sh的代码为:

echo "monitor the startindex thread running...."

result=`ps ax|grep RunVegaIndex |grep -v grep | cut -f 2 -d ' '`

echo $result

if [ "$result" = "" ]; then

echo "index threading not running..."

echo "restart the index thread..."

. /etc/profile && cd /root/vegaindex && ./startindex.sh 1>&/dev/null &

date > /root/vegaindex/stoptime.txt

else

echo “running…”

fi

如果执行的程序需要设置locale,那么要在check.sh中设置一下,或者执行以下/etc/profile。

|

1、修改 /etc/sysconfig/i18n 文件,如

LANG="en_US",xwindow会显示英文界面,

LANG="zh_CN.GB18030",xwindow会显示中文界面。

改完之后重启生效,也可以使用以下两种方法直接生效:

[root@rac01 ~]# . /etc/sysconfig/i18n

[root@rac01 ~]# source /etc/sysconfig/i18n

2、cp /etc/sysconfig/i18n $HOME/.i18n

修改 $HOME/.i18n 文件,如

LANG="en_US",xwindow会显示英文界面,

LANG="zh_CN.GB18030",xwindow会显示中文界面。

(#LANG="zh_CN.gb2312"也行)

这样就可以改变个人的界面语言,而不影响别的用户

(Debian不支持GB18030(RH的zysong字库是有版权的)

现在好像没有Free的GBK和GB18030字库

3、在宿主目录下:

vi .bashrc或者是vi .bash_profile

export LANG=zh_CN.GB2312

export LC_ALL=zh_CN.GB2312)

即时生效方法如上

例:[root@RHEL4_U5 test]# cat /etc/sysconfig/i18n

#LANG="en_US.UTF-8"

LANG="zh_CN.gb2312"

SUPPORTED="zh_CN.UTF-8:zh_CN:zh"

SYSFONT="latarcyrheb-sun16"

然后就可以正常地显示中文了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值