不同情况下的乱码处理方案

上传人:工**** 文档编号:565010740 上传时间:2022-09-27 格式:DOC 页数:35 大小:642.01KB
返回 下载 相关 举报
不同情况下的乱码处理方案_第1页
第1页 / 共35页
不同情况下的乱码处理方案_第2页
第2页 / 共35页
不同情况下的乱码处理方案_第3页
第3页 / 共35页
不同情况下的乱码处理方案_第4页
第4页 / 共35页
不同情况下的乱码处理方案_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《不同情况下的乱码处理方案》由会员分享,可在线阅读,更多相关《不同情况下的乱码处理方案(35页珍藏版)》请在金锄头文库上搜索。

1、PRIMETON TECHNOLOGIES, LTD.上海普元信息技术有限责任公司不同情况下的乱码处理方案经验技巧总结No part of this document may be reproduced, stored in any electronic retrieval system, or transmitted in any form or by any means, mechanical, photocopying, recording, otherwise, without the written permission of the copyright owner.COPYRIGH

2、T 2006 by Primeton Technologies, Ltd. ALL RIGHTS RESERVED.文档修订记录序号版本号修订日期修订概述修订人审批人备注10.12006-11-20创建林地发规范及约定1. 【规范及约定】的内容仅仅是对本文档编写的规范和约定进行描述,文档编写人员必须严格按照本规范和约定进行编写,在文档正式发布时删除该部分内容;2. 文档内容采用“首行缩进、小四号字体、1.5倍行距”的格式,选中段落文本使用快捷键【Ctrl+Alt+4】可以进行格式化(直接选中蓝色的说明文字即可);3. 必须填写“文档修订控制记录”;4. 文档目录必须更新为最新的,与实际内容相对

3、应;5. 模版中每部分内容的下面的蓝色字体是对这块内容的说明,编写文档时选中这段文字,使用【Ctrl+Alt+4】快捷键即可格式化成要求的字体; 1 文档摘要1.1 文档分类经验技巧-常见问题级、常见问题-运行、FAQ-EOS Server1.2 关键字/Tag乱码、EOS、WebSphere、配置文件、分界点、转码、字符集1.3 摘要本文档是针对我们遇到乱码问题的经验总结,同时,列出了EOS+WebSphere5.1环境下经常遇到过得乱码问题的解决过程1.4 作者、协作者及评审人员作者、写作者:林地发、华石新评审人员:初评小组、刘国鹏1.5 定义、首字母缩写词及缩略语隐含提交: jsp文件中

4、通过引用/fbtools/page/hiddensubmit.js,将客户端的请求通过ajax提交到fbtoolspagehiddensubmit.jsp来获取服务器端数据2 简介2.1 场景描述在浏览器界面上出现乱码、出现“?”、出现解析XML错误、js脚本错误2.2 适用环境EOS5.X+WebSphere5.x3 经验总结3.1 解决思路乱码是应用系统运行中经常出现的一个问题,也是应用系统中非常突出而且必须解决的一个问题。由于引起出现乱码的因素很多,所以解决乱码问题比较复杂。本文从编码原理到实际案例对乱码原因进行详细的分析,并且整理和归纳了多个项目出现乱码现象的解决经验,总结了解决一般性

5、乱码的办法和过程。在整个B/S请求从客户端页面提交内容到服务器,服务器接收响应,并从数据库中获取数据,经过一番处理之后再返回给客户端的浏览器页面显示的过程中,只要一个环节在转码过程中有错误就会导致乱码的现象发生。如果你的系统出现了乱码,首先不要着急,不要被系统中出现的问题所吓坏。如果出现了这种问题又该如何办呢?我们应该先判断乱码的现象,要根据现象,查出数据在整个数据流向的过程中,数据到底从什么时候什么地方开始由正常开始变为乱码,即找出数据变成乱码的分界点: 如果是数据库中的数据本身是乱码,需要检查数据库的字符集是否设置正确,不同的数据库不一样比如Oracle数据库在安装的过程中就可以选择某种字

6、符集:ALTER DATABASE CHARACTER SET ZHS16GBK查找当前字符集:select userenv(language) from dual;DB2在创建数据库的时候可以指定字符集:create database sccrm using codeset UTF-8 territory CNMySQL在创建数据库的时候可以指定字符集:create database testxxx default charset=UTF-8 操作系统是否安装相应的字符集(unix下可以用locale查看当前字符集),将相应的数据打印出来即可 Java程序是否存在转码错误,字符集经常是在UT

7、F-8、GBK、ISO-8859-1之间转换 应用服务器各个相关设置字符集的地方是否设置正确找到分界点之后,针对分界点之前和之后,查找在什么地方可以设置字符集,每一个分界点可以在哪些地方设置相关的字符集。如果是程序,可以查找到哪一行代码获取数据的时候开始乱码,从而可以考虑修改代码。如果不是程序,需要查看当前应用有哪些地方可以设置字符集,并且要了解每个设置字符集的地方,他们之间的相互关系3.2 编码转换的关键点常见乱码现象: 浏览器中看到的 Jsp/Servlet 页面中的汉字变成成了 ? 浏览器中看到的 Servlet 页面中的汉字变成成了乱码 Jsp/Servlet 页面无法显示 GBK 汉

8、字 JSP 页面中内嵌在,等Tag包含的 JAVA code 中的中文成了乱码,但页面的其它汉字是对的 Jsp/Servlet 不能接收 form 提交的汉字 JSP/Servlet 数据库读写无法获得正确的内容隐藏在这些问题后面的是各种错误的字符转换和处理,是因为 Java font 设置错误引起的。解决类似的字符 encoding 问题,需要了解 Jsp/Servlet 的运行过程,检查可能出现问题的各个点。 根据如上图表,我们可以得出编码转换点如下: JSP 编译:Java 应用服务器将根据 JVM 的 file.encoding 值读取 JSP 源文件,编译生成 JAVA 源文件,再根

9、据 file.encoding 值写回文件系统。如果当前系统语言支持 GBK,那么这时候不会出现 encoding 问题。如果是英文的系统,如 LANG 是 en_US 的 Linux, AIX 或 Solaris,则要将 JVM 的 file.encoding 值置成 GBK 。系统语言如果是 GB2312,则根据需要,确定要不要设置 file.encoding,将 file.encoding 设为 GBK 可以解决潜在的 GBK 字符乱码问题 Servlet 需要将 HTML 页面内容转换为 browser 可接受的 encoding 内容发送出去。依赖于各 JAVA App Server

10、 的实现方式,有的将查询 Browser 的 accept-charset 和 accept-language 参数或以其它可能的方式确定 encoding 值,有的则不管。因此采用固定encoding 也许是最好的解决方法。对于中文网页,可在 JSP 或 Servlet 中设置 contentType=text/html; charset=GB2312;如果页面中有GBK字符,则设置为contentType=text/html; charset=GBK,由于IE 和 Netscape对GBK的支持程度不一样,作这种设置时需要测试一下。因为16位 JAVA char在网络传送时高8位会被丢弃,

11、也为了确保Servlet页面中的汉字(包括内嵌的和servlet运行过程中得到的)是期望的内码,可以用 PrintWriter out=res.getWriter() 取代 ServletOutputStream out=res.getOutputStream(). PrinterWriter 将根据contentType中指定的charset作转换 (ContentType需在此之前指定!); 也可以用OutputStreamWriter封装 ServletOutputStream 类并用write(String)输出汉字字符串。对于 JSP,JAVA Application Server

12、应当能够确保在这个阶段将嵌入的汉字正确传送出去。 解释 URL 字符 encoding也有可能出现乱码。如果通过 get/post 方式从 browser 返回的参数值中包含汉字信息, servlet 将无法得到正确的值。URL传值为浏览器客户端按iso-8859-1进行传输,服务器可以设置URL传输中文时可以不再指定编码而直接可以得到客户端传输的中文字符。 JSP/Servlet 编程中经常出现 encoding 问题的另一个地方是读写数据库中的数据。流行的关系数据库系统都支持数据库 encoding,也就是说在创建数据库时可以指定它自己的字符集设置,数据库的数据以指定的编码形式存储。当应用

13、程序访问数据时,在入口和出口处都会有 encoding 转换。对于中文数据,数据库字符编码的设置应当保证数据的完整性. GB2312,GBK,UTF-8 等都是可选的数据库 encoding;也可以选择 ISO8859-1 (8-bit),那么应用程序在写数据之前须将 16Bit 的一个汉字或 Unicode 拆分成两个 8-bit 的字符,读数据之后则需将两个字节合并起来。没有充分利用数据库 encoding 的作用,反而增加了编程的复杂度,ISO8859-1不是推荐的数据库 encoding。JSP/Servlet编程时,可以先用数据库管理系统提供的管理功能检查其中的中文数据是否正确。然后

14、应当注意的是读出来的数据的 encoding,JAVA 程序中一般得到的是 Unicode。写数据时则相反。3.3 定位问题时常用的技巧定位中文encoding问题通常采用最笨的也是最有效的办法在你认为有嫌疑的程序处理后打印字符串的内码。通过打印字符串的内码,你可以发现什么时候中文字符被转换成Unicode,什么时候Unicode被转回中文内码,什么时候一个中文字成了两个 Unicode 字符,什么时候中文字符串被转成了一串问号,什么时候中文字符串的高位被截掉了取用合适的样本字符串也有助于区分问题的类型。如:”aa啊aa?aa” 等中英相间、GB、GBK特征字符均有的字符串。一般来说,英文字符无论怎么转换或处理,都不会失真(如果遇到了,可以尝试着增加连续的英文字母长度)3.4 WEBSPHERE字符集相关配置有两种字符集编码问题值得注意:一、Request/Response 字符集- HTTP接收、发送的参数的字符集,例如从表单中和从JSP网页中提交的内容二、JSP网页编码- JSP文件本身的编码因为很多人都混淆这两种编码问题,而且被什么参数影响什么编码所迷惑。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号