百度空间 | 百度首页 
 
查看文章
 
flash调用XML中的单引号后显示乱码的解决办法
2008-05-30 10:14

先贴一个转移字符的对照表!

下面是五个在XML文档中预定义好的实体:

<

<

小于号

&gt;

>

大于号

&amp;

&

&apos;

'

单引号

&quot;

"

双引号

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

  注意: 只有"<" 字符和"&"字符对于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的话,他会显示为"¡¦";

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

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


类别:flash技术2.0 | 添加到搜藏 | 浏览() | 评论 (4)
最近读者:
 
网友评论:
1
2008-06-16 17:58 | 回复
太复杂了吧?? 把TextField 的html属性设为 true就行了
 
2
2008-06-17 11:23 | 回复
恩~是的,我最后也是采取这种方式的~ 忘记更新了,谢谢您的提醒
 
3
2008-08-21 09:51 | 回复
3
 
4
2009-03-13 10:42 | 回复
谢谢各位大侠了~~~~~~~~~~
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     
 
精彩相册
   
     

©2009 Baidu