当前位置: 技术问答>linux和unix
java soket程序在Redhat Linux 5上运行汉字乱码.急................
来源: 互联网 发布时间:2016-06-09
本文导语: 这是我用的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: ...
这是我用的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,不知和这个有关没
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。
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"
然后就可以正常地显示中文了
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"
然后就可以正常地显示中文了