1NetMedia_Blog

<< JS下拉菜单示例  类别: Flash flash中replace函数和字符串转换... >>
flash调用XML中的单引号后显示乱码的解决办法
[ 日期: 2011-02-14 3:46:46 PM | 作者: admin | 来源: NScartoon | 人气:5818 | 晴天 | 心情: +2 ] 字号: 【
急速栏目链接:
标签:单引号  |  与号  |  尖括号  |  转义  |  
先贴一个转移字符的对照表!
下面是五个在XML文档中预定义好的实体:



实体必须以符号"&"开头,以符号";"结尾。

注意: 只有"<" 字符和"&"字符对于XML来说是严格禁止使用的。剩下的都是合法的,为了减少出错,使用实体是一个好习惯。


有时候这个转义字符没用,例如:

之前做的一个游戏,调用外部数据时,在flash中显示乱码,经过检查,发现了貌似flash AS2.0对这个符号"感冒"?因为这个XML之前我是用AS3.0调用时所作的一个游戏,没有类似的问题!


实例:

因为xml很长,我就贴出问题的一部分:
<answer_question>I'm a boy.</answer_question>这个是xml中显示的
flash 调用后显示为:I&apos;m a boy.


后来上网找也没有找个究竟,试了好多方法都没有成功:

我先把我之前的解决思路贴出来,虽然都不成功,但是 为最后的方法奠定了一定的基础.

1,开始是以为XML编码问题,检查了确认是UTF-8.

2.后来我用了,转译字符:
<answer_question>I&apos;m a boy.</answer_question>在XML里显示是正确的
调用后在flash里还是上述问题;

3.用<![CDATA[]]>:
<answer_question><![CDATA[I'm a boy.]]></answer_question>在XML里显示是正确的

调用后在flash里还是上述问题;


4.改用escape函数: var remember:String ="I&apos;m a boy."
trace(remember)//I&apos;m a boy.
var escapedremember:String = escape(remember);
trace(escapedremember)//I%26apos%3Bm%20a%20boy%2E
var unescapedremember:String = unescape(escapedremember);
trace(unescapedremember)//I&apos;m a boy.

经测试还是不行。


后来没办法,只能自己手写一个函数,来强行对特殊符号的转化,代码如下,

var remember:String = _parent.tempString.toString();//这里将父级中的XML专为字符串,这里根据需要自己改动
for (var i:Number = 1; i<=remember.length; i++) {//因为"'"这个符号最开始的位置也要在第二个,所以i设为了1;
var mySubstring:String = new String();
mySubstring = remember.substr(i, 6);//如果LOAD进来的文本里有"&apos;"这个,我就把它取出来,因为个数为6,所以对文本里所有的6个字符的,都进行取值判断
if (mySubstring == "&apos;") {
First = remember.substr(0, i);//因为取值后,原文本变为了3个独立的字符串了
third = remember.substr(i+6)
remember = First+"'"+ third//这里进行转换,输出自己希望的符号
}
}


或者:

var remember:String = tempString.toString();

var mySubstring:String = remember.split("&apos;").join("'")


其实最简单的还是用:TextField

TextField html属性设为 true,这样显示就可以了,忘记来博客更新了,谢谢daWei的提醒!

如果这个单引号是在xml的一个属性里的话,例如:

<Question>
<question id ="1">
<picture>1</picture>
<sound>1</sound>
<answer trued="I doesn't like to swim." />
<answer falsed="I doesn't like to eat pizza."/>
<answer falsed="I doesn't like to go shopping."/>
</question>
</Question>

在flash里面trace的话,他会显示为"&iexcl;&brvbar;";

用那个htmlText显示也不行,这个是时候只能用split("&iexcl;&brvbar;").join("'");这个方法

今天又来补充一下,在上面所讲的"如果这个单引号是在xml的一个属性里的话",他会显示为"&iexcl;&brvbar;";后来经过排查,原来是xml里的单引号是用了全角的单引号,如果改为半角的话,可以直接输出,不要考虑上述的转换字符函数,但是令人费解的是,如果用之前的中文的全角,虽然直接打开xml,会报错,不能显示,但是flash居然可读,而且可以显示,就造成了显示他会显示为"&iexcl;&brvbar;"的情况。看来这个还是AS2.0不稳定的表现,还是AS3.0好,不管在xml什么位置都可以正常显示,真替人省心啊~~~

   
Rss Comment  

没有相关评论

发表评论
请先注册,才能发表评论!
- 注册 -