您的位置:首页 > 编程语言 > Java开发

FLASH读取JAVA生成的XML文件,不同平台乱码

2008-12-16 12:24 344 查看

又见乱码~~
几日前,在实现分页时就出现了乱码,最后改了TOMCAT配置参数解决了
没过两天,接手他人的工作,在FLASH中读取XML文件,在前台显示又是乱码,算是和乱码较上劲了!第一次处理FLASH,费了两天时间,今日终于解决了!!

一开始在网上搜了一翻,了解了一些FLASH产生乱码的原因
解决方法基本上就是两种:
1、 设置XML文件UTF-8格式
2、 在FLASH中设置System.useCodePage=true;
普遍认为将XML,改成UTF-8的比较好

第一次乱码解决:[/b][/b]
于是开始了修改:
首先试了一下第一种,在用流写文件的时候生成的XML头结点,
"<?xml version=/"1.0/" encoding=/"UTF-8/"?>"
在使用流的时候也用UTF-8
new OutputStreamWriter(out, "UTF-8");
把工程发布重新运行,结果一看还是乱码,
*_*,为什么呢?于是查看了一下FLASH的代码,结果发现了有System.useCodePage=true;这一句,想了一下,这是两种解决方法,会不会同时使用产生了冲突呢??
将其设为false,重新发布FLASH,在重新运行工程,
^_^ ,OK!乱码没有了~~,高兴中

第二次乱码解决:[/b][/b]
可是好景不长,把程序放在了服务器上开始做进一步的测试,结果乱码又出现了,百思不得其解~~,为什么在本地就没有乱码,而在服务器上就有乱码呢??
于是查看了一下本地系统的编码集:“GBK”,而服务器的系统编码集:“GB2312”
难道系统的编码集不同就会产生乱码,但是并没有System.useCodePage = true呀??
于是又上网搜,找到了一个介绍即使在xml文件中指定了是“UTF-8”但是生成的文件不一定就是“UTF-8”编码的,有可能与当前生成XML的语言的源文件相同,此时一定要设置成“gb2312”,就想会不会也是遇到了这个问题??

于是又在用写流文件的时候生成的XML头结点改成,
"<?xml version=/"1.0/" encoding=/"GB2312/"?>"
在使用流的时候也用GB2312
new OutputStreamWriter(out, " GB2312");
在FLASH中添加上
System.useCodePage=true;
重新发布~~
在本地运行:OK
在服务器上运行:OK

*^÷^*

总结[/b]:(参照查找的资料)
1、 若是XML文件是用某种语言生成的,而不是手动建立的,那么XML文件中若含有中文字符,即使声明编码为UTF-8,但是最后生成的文件也可能无法被正确读取,因为它生成的编码方式是你当前所用语言的源文件编码格式。
此时,要想FLASH正确读取XML不出现乱码,就必须设置encoding为GB2312。
然后再设置FLASH中System.useCodePage = true;(但是设置了以后可能在非中文的操作系统中可能又会出现乱码)
2、 若是手动生成的XML文件中设置了“UTF-8”,且保存时以“UTF-8”的格式保存,那么在FLASH中就设置System.useCodePage = false或者根本就去掉,因为默认也是false;

疑问:[/b][/b]
虽然问题暂时能够解决了,但是仍然不明白:

查看了一下本地JAVA源文件的编码集,结果发现也是“UTF-8”的,此处十分不解,如果说第一次乱码在本地解决了,是由于生成的XML文件与本地的JAVA源文件全是“UTF-8”编码的,那么为什么到服务器上就又产生乱码了?是由于服务器的系统编码集与本地不同?而且用JAVA的输出流,指定编码方式,
new OutputStreamWriter(out, "UTF-8");
起到了什么作用?如果说起到了作用,将生成的XML文件按“UTF-8”的方式存储,那么到服务器为什么不起作用?还是我漏掉了其他的原因?

此外,第一次接触FLASH,特别是读取XML文件,如果有不对的地方,望牛人指出
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: