JiveJdon Community Forums
在线426人   首页   主题表   培训咨询   标签   精华   查搜   注册    登陆 RSS
首页 » 论坛 » J2EE/JavaEE/JEE/EJB/JSF等技术讨论
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表
???en_US.forumThreadNext.name??? 下一主题
Go 总共有 3 回复 / 1
 发表新帖子   回复该主题贴
zmeng

悄悄话
发表文章: 18
注册时间: 2003年03月19日 15:10
robbin,问一个字符集的问题 2003年08月14日 09:22 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
标签列表
我通过socket连接到一个认证网关获取信息,网关返回的信息如下
echo: Serial=106082379178670
echo: Family=3
echo: Cat=4
echo: Act=6
echo: Verify=80
echo: 88806756@XXXXXXXXXX|0|测试ing|20|1|0000|中国|北京市|东城区|||||||||0|||0|0|||||1
其中Verify的值是最后一条信息的长度,我通过判断收到每行信息的长度是否等于Verify的值,从而知道已经收到了全部信息,退出循环,关闭socket连接。
部分代码如下:
echoSocket = new Socket("XXX.XXX.XXX.XXX", XXXX);
out = new PrintWriter(echoSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));

out.println(getUser);
while ( (echooutput = in.readLine()) != null) {
if (echooutput.indexOf("Verify") != -1)
Verify = Integer.parseInt(echooutput.substring(7, echooutput.length()));
if (Verify == new String(echooutput.getBytes(), "ISO8859_1").length()) {
reStr = echooutput;
break;
}
}

out.close();
in.close();
echoSocket.close();

....

原来程序在windows环境下没问题,现在我们要把应用转到linux下,就不行了,帮忙看看是怎麽回事?难道字符集和操作系统有关系吗?谢谢了!
robbin

悄悄话
发表文章: 589
注册时间: 2003年06月18日 09:32
Re: robbin,问一个字符集的问题 2003年08月14日 10:01 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
Java内部对字符串处理统一用UTF-8,从外部读入的字符将根据操作系统的字符集编码进行转换到UTF-8上;向外部输出字符串的时候,将UTF-8字符串向操作系统的编码转换,然后输出。

如果你的Linux支持GBK字符集或者GB2312字符集,最简单的解决办法是修改Linux默认字符集设定。

Bash:
export LANG=zh_CN.GBK
java ......

C shell:
set LANG zh_CN.GBK
java ......

如果Linux不支持中文,那么输出字符串总归都是乱码,不过可以保证字符串正常转换,修改以下行:
in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
--->
in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream(),"GBK"));


out = new PrintWriter(echoSocket.getOutputStream(), true);
--->
out = new PrintWriter(new OutputStreamWriter(echoSocket.getOutputStream(),"GBK"), true);

zmeng

悄悄话
发表文章: 18
注册时间: 2003年03月19日 15:10
Re: robbin,问一个字符集的问题 2003年08月14日 10:32 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
多谢robbin!
我把程序修改了一下
echoSocket = new Socket("XXX.XXX.XXX.XXX", XXXX);
out = new PrintWriter(echoSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream(),"ISO-8859-1"));

out.println(getUser);
while ( (echooutput = in.readLine()) != null) {
if (echooutput.indexOf("Verify") != -1)
Verify = Integer.parseInt(echooutput.substring(7, echooutput.length()));
if (Verify == echooutput.length()){
reStr = echooutput;
break;
}
}

out.close();
in.close();
echoSocket.close();
在win和linux下都可以了
可是我不明白我用
new String(echooutput.getBytes(), "ISO-8859-1").length()
为什麽不可以?

还有linux和mysql的字符集在什麽地方改?我的一些静态页面在win下显示正常,而在linux下显示乱吗,但jsp就没事?

ISO-8859-1如何转化为中文?
关于字符集的写法ISO-8859-1,8859_1,GB2312,bg2312是不是对写法要求不严格?

另外你写的关于字符集的文章在什麽地方,我找不到。

:)不好意思,一口气有问了这麽多,希望不要烦,谢谢了!
robbin

悄悄话
发表文章: 589
注册时间: 2003年06月18日 09:32
Re: robbin,问一个字符集的问题 2003年08月14日 11:24 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
>>new String(echooutput.getBytes(), "ISO-8859-1").length()

GBK编码字符串转换成为ISO-8859-1字节长度会有变化(具体来说,会缩短)

>>还有linux和mysql的字符集在什麽地方改?

你大概对Linux不熟,如果你希望只对Java程序修改操作系统字符集设定,写一个shell脚本,在启动Java程序之前修改LANG环境变量就可以了,例如:

run.sh

#!/bin/sh
export LANG=zh_CN.GBK
export CLASSPATH=...
export PATH=/usr/java/bin:$PATH
java .......

然后chmod a+x run.sh
运行:
./run.sh

如果对登陆用户修改操作系统字符集设定,那么在login脚本里面修改,也可以在系统环境变量设定文件里面修改(不同的Linux发行,文件名称不一样)

在Linux上,修改MySQL数据库字符集是你编译MySQL之前,configure的时候设定的,例如:
./configure --with-charset=GBK

但一般来说,你不需要管MySQL数据库字符集设定,需要注意的是JDBC连接的设定,例如URL:
jdbc:mysql://localhost/hibernate?useUnicode=true&characterEncoding=GBK

>>我的一些静态页面在win下显示正常,而在linux下显示乱吗,但jsp就没事?

不知道你是否用apache2作为Web Server,如果是的话,需要修改httpd.conf关于字符集的设定。这个问题大概和Web Server的配置有关。

>>ISO-8859-1如何转化为中文?
不懂你的意思

>>关于字符集的写法ISO-8859-1,8859_1,GB2312,gb2312是不是对写法要求不严格?
JDK要求不严格,但是有的App Server有严格要求,所以最好规范点。

>>另外你写的关于字符集的文章在什麽地方,我找不到。
没有写完,写完会投稿,也许会投程序员杂志。

这个主题有 3 回复 / 1Go
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache 缓存 DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Seam Spring Struts
正在读取,请等待...
google yahoo 新浪ViVi 365Key网摘 天极网摘 CSDN网摘 添加到百度搜藏 POCO网摘 博采网摘
查询本论坛内 回复超过的热门帖子
     回复该主题贴
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
  每2分种自动备份发贴内容Ctrl-V粘贴取出,提问题前先查询标签列表

RSS 手机阅读 add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-08 jdon.com

anti spam