您的位置:首页 > 其它

关于传递参数乱码和AJAX乱码问题

2008-11-18 09:17 387 查看
Weblogic
10的JVM启动字符集与操作系统默认字符集相同,因此很可能导致默认字符集与开发环境不同。如果使用的是UTF-8编码的应用不会出现任何的问题,但是一旦编码采用GBK的时候会出现乱码问题。使用AJAX方式构建的应用很可能由于传输过程中使用了字节流而产生乱码。

最简单的解决方法是修改weblogic的启动脚本,设置JVM字符集启动参数。
Weblogic的根目录/wlserver_10.0/common/bin/startManagedWebLogic.cmd或者startManagedWebLogic.sh

这个文件中增加一行:

set
JAVA_OPTIONS=-Dfile.encoding=GBK

其实配置很简单,也可以在commEnv.cmd中更改

AJAX出现乱码的另外一个解决方法是对传递的参数做两次转码

使用javascript的encodeURI
函数两次传递参数,这样在服务器端使用request.getParameter()
是会取得一次编码的内容,再使用java.net.URLDecoder.decode(
)函数就可以获得正确的信息,这个能够取得正确信息也是因为他们是拥有一样的字节流编码规则。
var value=你想传输的变量;
value=encodeURI(value);
value=encodeURI(value);这样传送给服务器端
String value=request.getParameter("value");可以使用很多种方式传给server端
value=URLDecoder.decode(value,"utf8");

但是最好还是使用prototype
等成熟的框架来传递参数,它们都做了转码并传递参数,可以避免发生一些乱码的问题。

乱码并不神秘,也不用苦恼,其实关键之处只有一点。你的客户端传递的字节流的编码与服务器端的不一致,使用String的getBytes方法可以解决大多数情况。只要保证request传输的编码与server端JVM的编码一致便不会出现乱码的问题。

文本文件读取信息时出现的乱码问题,文本文件不同的字符集编码下构建出来的是不一样的,拿windows系统来说,在中文环境下建立的文本当你更改到英文环境是会无法打开,打开后也会出现乱码现象。

当你将一个在windows下生成的文本文件传送到JVM字符集编码为西方字符集的服务器上,这个时候解析文件如果不增加编码参数就会发生乱码情况。

InputStream
inStream = new
ByteArrayInputStream(inFile);
BufferedReader
in = new
BufferedReader(new
InputStreamReader(inStream,"GBK"));

如果不在reader中加入”GBK”作为参数就会发生乱码现象。

毕竟java是外国人设计的东西,他们有一个对中国人来说会经常制造出麻烦的习惯——使用iso-8859-1字符集作为默认字符集。这样的东西都会带来中文的无法处理或者乱码,虽然JVM内部是使用UTF来进行编码,但是还是会影响到中文的处理。所以涉及中文的东西多少都会出现这样的情况。

乱码出现的原因都是一样的,序列化的编码和解码字符集不一致导致,找到根源不难解决这样的问题,遇到问题要多多寻找本质原因。其实每个程序员在工作的时候最好都是与互联网联通的,这样才能保证最快速度的解决问题。当然自己一样可以找到问题的所在,只是时间上的消耗和精力上的消耗都是个问题。作为一个管理者自然也希望自己的手下都可以在最短的时间内创造最多的有效代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: