工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 2618|回复: 2

[推荐]java里的中文问题(QQ群讲座实录)

[复制链接]
发表于 2004-9-21 21:14 | 显示全部楼层 |阅读模式
2004-09-07 19:48:35 朱世杰℡(16489875)
下面开始

2004-09-07 19:48:52 朱世杰℡(16489875)
这次我和大家讨论一下JAVA的中文问题


2004-09-07 19:49:25 朱世杰℡(16489875)
大家都是做JSP的,相信也碰到不少中文问题吧


2004-09-07 19:49:55 我是谁(287188276)
是呀

2004-09-07 19:50:02 朱世杰℡(16489875)
现在说几种比较常见的乱码现象

2004-09-07 19:50:20 朱世杰℡(16489875)
大家不要发言

2004-09-07 19:50:34 朱世杰℡(16489875)
等会可以提问的,谢谢

2004-09-07 19:50:58 朱世杰℡(16489875)
中文问题有几种

2004-09-07 19:51:09 朱世杰℡(16489875)
一个是和数据库相关的

2004-09-07 19:51:19 朱世杰℡(16489875)
一个是和表单提交相关的

2004-09-07 19:51:36 朱世杰℡(16489875)
还有就是国际化时遇到的问题

2004-09-07 19:51:58 朱世杰℡(16489875)
先和大家说一下编码和解码

2004-09-07 19:52:24 朱世杰℡(16489875)
一般我们所说的字符,比如:A,B,8,等等



2004-09-07 19:52:55 朱世杰℡(16489875)
在实际存储和通信时是以字节来进行的。

2004-09-07 19:53:16 朱世杰℡(16489875)
比如一个简单的例子

2004-09-07 19:53:34 朱世杰℡(16489875)
我注册一个用户,然后提交到服务器

2004-09-07 19:53:49 朱世杰℡(16489875)
这中间就有几个编码和解码过程

2004-09-07 19:54:24 朱世杰℡(16489875)
首先IE会把你的字符按照一定的字符集来编码

2004-09-07 19:54:43 朱世杰℡(16489875)
然后以字节来传输到服务器

2004-09-07 19:55:04 朱世杰℡(16489875)
最后在服务器端,再以某种字符集来解码

2004-09-07 19:55:27 朱世杰℡(16489875)
如果编码和解码用的字符集不同,那自然会产生错误了

2004-09-07 19:57:09 朱世杰℡(16489875)
在JAVA程序处理中,是以UNICODE字符集来处理的  

2004-09-07 19:57:26 朱世杰℡(16489875)
这是默认情况

2004-09-07 19:57:47 朱世杰℡(16489875)
我们先讨论就这个简单的过程吧

2004-09-07 19:58:01 朱世杰℡(16489875)
刚才说了

2004-09-07 19:58:28 朱世杰℡(16489875)
客户端和服务器段都是以某种字符集来编码和解码的

2004-09-07 19:58:54 朱世杰℡(16489875)
那如何正确决定字符集就是解决乱码问题的关键了

2004-09-07 20:00:38 朱世杰℡(16489875)
然后来看IE是如何决定用什么字符集来对字符编码的

2004-09-07 20:00:40 明宇(17068367)
对啊,能解释一下吗

2004-09-07 20:00:49 king(26085027)
字符集那些我们最常用

2004-09-07 20:01:32 朱世杰℡(16489875)
比如GBK,GB2312

2004-09-07 20:01:59 king(26085027)
实际存储和通信时是以字节,那UNICODE字符集再传的时候不是必定错


2004-09-07 20:02:55 朱世杰℡(16489875)
UNICODE是国际码,是可以支持绝大多数语言的

2004-09-07 20:03:26 king(26085027)
怎么可以保证s和c的字符集用的一致?

2004-09-07 20:03:35 朱世杰℡(16489875)
这就是我要说的

2004-09-07 20:03:55 朱世杰℡(16489875)
我找一个朋友写的文章:

2004-09-07 20:03:57 朱世杰℡(16489875)
2.        靠什么决定了Encoding

大约是这六个方面来的信息使浏览器决定用什么encoding:

1)        XSL所决定的

2)        实体(Entity Body)中的特殊标记

3)        用户手动对该Web页设置的decoding

4)        响应头(Response Header Field)中的Content-Type

5)        HTML元素META中的charset

6)        浏览器以前所用的decoding

2004-09-07 20:07:47 朱世杰℡(16489875)
都是决定浏览器的对字符编码的

2004-09-07 20:08:47 朱世杰℡(16489875)
表单提交时

2004-09-07 20:09:10 朱世杰℡(16489875)
默认是ISO8859-1编码的

2004-09-07 20:10:01 朱世杰℡(16489875)
所以当你提交时,进行解码时也用ISO8859-1解码,就可以正确显示了

2004-09-07 20:10:28 朱世杰℡(16489875)
大概过程是如此

2004-09-07 20:10:40 朱世杰℡(16489875)
下面大家把自己的情况一个个说一下

2004-09-07 20:10:44 朱世杰℡(16489875)
我们解释一下

2004-09-07 20:10:57 朱世杰℡(16489875)
就明白中间的问题了

2004-09-07 20:11:59 king(26085027)
<?xml version="1.0" encoding="UTF-8"?>
"UTF-8"是个什么码,常用吗?

2004-09-07 20:12:16 snowtank/:D(12048520)
请问开始讲课了?

2004-09-07 20:12:18 朱世杰℡(16489875)
utf-8是UNICODE码

2004-09-07 20:12:24 朱世杰℡(16489875)
是国际码

2004-09-07 20:12:49 朱世杰℡(16489875)
如果要实现多国语言,就要用UTF-8

2004-09-07 20:13:12 J全道(14142100)
ISO8859-1 不可以?

2004-09-07 20:14:05 朱世杰℡(16489875)
ISO8859-1可以,但UTF-8支持更多


2004-09-07 20:14:14 朱世杰℡(16489875)
也是官方推荐的

2004-09-07 20:17:42 朱世杰℡(16489875)
IE用某种字符集对字符编码

2004-09-07 20:17:46 无敌微微(75940071)
呵呵,我想大家还是先听朱说吧,先不要发言

2004-09-07 20:18:07 朱世杰℡(16489875)
在 SERVER端用某种字符集解码

2004-09-07 20:18:20 朱世杰℡(16489875)
只要把2端的统一,就OK了

2004-09-07 20:18:31 朱世杰℡(16489875)
就这样

2004-09-07 20:19:23 朱世杰℡(16489875)
然后再说一下数据库的过程

2004-09-07 20:20:00 朱世杰℡(16489875)
请大家记住,数据库存储的是字节,而不是字符


2004-09-07 20:20:26 朱世杰℡(16489875)
所以在JAVA程序到数据库之间是有编码解码过程的

2004-09-07 20:21:31 朱世杰℡(16489875)
大家通常使用的URL里指定的编码,意思就是按这个字符集来编码,再存储

2004-09-07 20:22:10 朱世杰℡(16489875)
在数据库出来,到JAVA程序的时候

2004-09-07 20:22:27 朱世杰℡(16489875)
是以数据库的默认字符集来解码的

2004-09-07 20:23:01 朱世杰℡(16489875)
MYSQL4.0是测试支持UTF的

2004-09-07 20:23:04 朱世杰℡(16489875)
4.1支持

2004-09-07 20:23:07 朱世杰℡(16489875)
我测试过

2004-09-07 20:23:09 朱世杰℡(16489875)



2004-09-07 20:23:21 朱世杰℡(16489875)
如果你用的是3.*的

2004-09-07 20:23:39 朱世杰℡(16489875)
那就没有办法来用UTF存储了

2004-09-07 20:24:14 朱世杰℡(16489875)
如果需要实现国际化

2004-09-07 20:24:33 朱世杰℡(16489875)
那就只有在数据库和JAVA程序之间,自己做个转码

2004-09-07 20:25:14 朱世杰℡(16489875)
就如此简单

2004-09-07 20:25:49 朱世杰℡(16489875)
其实中文问题是比较复杂的,大家也没有多少时间为了一个项目来仔细研究

2004-09-07 20:26:05 朱世杰℡(16489875)
我给大家几个解决方法吧

2004-09-07 20:26:17 我是谁(287188276)
[v]

2004-09-07 20:26:41 朱世杰℡(16489875)
大家在JSP看到的<% @ page

2004-09-07 20:26:46 朱世杰℡(16489875)
这里面的编码

2004-09-07 20:27:41 朱世杰℡(16489875)
一定程度上可以说是它决定了文件的存储编码和文件解析完,发送给IE时的字节流的编码字符集

2004-09-07 20:27:59 朱世杰℡(16489875)
一般我们默认IE都是GBK

2004-09-07 20:28:54 朱世杰℡(16489875)
如果大家不做国际化,只做中文的话

2004-09-07 20:29:04 朱世杰℡(16489875)
那么用GB2312就够了

2004-09-07 20:29:25 朱世杰℡(16489875)
有时SERVER是无法知道IE的字符集编码的

2004-09-07 20:29:40 朱世杰℡(16489875)
所以对传送过来的字节的解码会不正确

2004-09-07 20:29:48 朱世杰℡(16489875)
这就是为什么乱码的部分原因

2004-09-07 20:30:20 朱世杰℡(16489875)
这种情况下

2004-09-07 20:30:28 朱世杰℡(16489875)
我们可以按照那几个条件

2004-09-07 20:30:42 朱世杰℡(16489875)
来让IE按照某个编码来处理

2004-09-07 20:30:51 朱世杰℡(16489875)
某个字符集

2004-09-07 20:31:10 朱世杰℡(16489875)
然后B/S中间可以加一层FILTER

2004-09-07 20:31:28 朱世杰℡(16489875)
来告诉SERVER,IE是用什么来编码的

2004-09-07 20:32:03 朱世杰℡(16489875)
说了这么多,就这些了

2004-09-07 20:32:16 朱世杰℡(16489875)
大家有问题,提问吧,一个个来

2004-09-07 20:32:29 朱世杰℡(16489875)
自己的中文问题,也可以提,我们一起来解决

2004-09-07 20:33:22 朱世杰℡(16489875)
这些是我以前自己研究中文问题的一些心得

2004-09-07 20:33:26 星期天(21767950)
可不可以提在applet中遇到的中文问题

2004-09-07 20:33:37 朱世杰℡(16489875)
可以

2004-09-07 20:34:44 king(26085027)
response.setContentType("text/html;charset=GB2312");
除了text/html;charset=GB2312还有其它形式的吗
是什么

2004-09-07 20:34:55 朱世杰℡(16489875)
TO KING:

2004-09-07 20:35:15 snowtank/:D(12048520)
filter是用servlet写吧?如果是做多语言版本?用什么方法解决呢?

2004-09-07 20:35:20 朱世杰℡(16489875)
这个是设置响应头的字符集

2004-09-07 20:35:33 朱世杰℡(16489875)
TO snowtank

2004-09-07 20:35:46 朱世杰℡(16489875)
多语言要用UTF-8

2004-09-07 20:35:56 朱世杰℡(16489875)
也可以用FILTER

2004-09-07 20:36:11 朱世杰℡(16489875)
我做过一个项目,全部都是UTF-8

2004-09-07 20:36:13 snowtank/:D(12048520)
你的意思是说做成象google那种形式的嘛?

2004-09-07 20:36:18 朱世杰℡(16489875)
实现了国际化

2004-09-07 20:36:22 朱世杰℡(16489875)


2004-09-07 20:36:25 朱世杰℡(16489875)
不对

2004-09-07 20:36:42 snowtank/:D(12048520)
看来这个和浏览器的设置有关系吧?

2004-09-07 20:36:51 朱世杰℡(16489875)
GOOGLE它是按IP镜象的,好象

2004-09-07 20:36:56 朱世杰℡(16489875)
不清楚

2004-09-07 20:37:01 朱世杰℡(16489875)
我做的这个是

2004-09-07 20:37:18 朱世杰℡(16489875)
英国人看到是英文

2004-09-07 20:37:25 snowtank/:D(12048520)
您的意思是,中文系统看的就是中文,英文系统看的是英文对吧?

2004-09-07 20:37:45 朱世杰℡(16489875)
这个是很好实现的

2004-09-07 20:38:03 朱世杰℡(16489875)
我实现了德语,日语,中文

2004-09-07 20:38:11 snowtank/:D(12048520)
是不是用到了属性文件?

2004-09-07 20:38:27 朱世杰℡(16489875)
这个当然了

2004-09-07 20:38:32 朱世杰℡(16489875)
STRUTS里的

2004-09-07 20:39:07 snowtank/:D(12048520)
嘿嘿,看了一点struts的书,今天还真用到了:)
听了你的讲课我更明白了:)多谢!

2004-09-07 20:39:30 朱世杰℡(16489875)
这里用STRUTS的人不多,所以我讲也没多大意义


2004-09-07 20:40:47 朱世杰℡(16489875)
STRUTS目前用的人是最多的,但是已经不是最好的选择了


2004-09-07 20:45:47 J全道(14142100)
JAVA 怎么解析 INI 文件?

2004-09-07 20:45:52 星期天(21767950)
我的applet,用htm显示总是出现乱码,英文是正确的,我还没有涉及到数据库,是不是也是上面提到问题

2004-09-07 20:46:06 天天开心(93853179)
可以把jsp连接sql_server数据库详细的讲一下吗?

2004-09-07 20:46:40 朱世杰℡(16489875)
你的APPLET的字符是如何编码的呢?

2004-09-07 20:48:08 king(26085027)
怎么把数据库的数据中文取出来,正确的显示出来?能不能把用println的简单代码演示一下

2004-09-07 20:48:42 星期天(21767950)
我没有对它编码,我想是不是用 HTML元素META中的charset,可以解决


2004-09-07 20:53:15 我是谁(287188276)
请问用作javabean的类要怎样才可以编译,得到它的类文件呀,它本身又没有main 方法的呀?
发表于 2004-9-29 11:35 | 显示全部楼层
补充点,在数据库里面一般用unicode的数据类型,有时可以解决你烦恼的中文问题
回复

使用道具 举报

发表于 2006-12-19 14:47 | 显示全部楼层
看来乱码问题在这里已经有过充分讨论了....
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2024-4-30 22:06

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表