使用Flex (和HTTPService),我从一个URL加载数据,这些数据是用GBK字符集编码的。这样一个URL的一个很好的例子是这一个。
浏览器获取数据位于GBK字符集中,并使用出现的中文字符正确显示文本。但是,Flex将将数据保存在不同的字符集中,而它恰好如下所示:
({"q":"tes","p":false,"bs":"","s":["ÌØ˹À","ÌØÊâ·ûºÅ","test","ÌØÊâÉí·Ý","tesco","ÌØ˹ÀÆû³µ","ÌØÊÓÍø","ÌØÊâ·ûºÅͼ°¸´óȫ","testin","ÌØ˹ÀÆ۸ñ"]});我需要正确地将文本更改为浏览器显示的相同字符串。我已经在使用ByteArray,使用“iso-8859-1”是迄今为止效果最好的:
var convert:String;
var byte:ByteArray = new ByteArray();
byte.writeMultiByte(event.result as String, "iso-8859-1");
byte.position = 0;
convert = byte.readMultiByte(byte.bytesAvailable, "gbk");这将创建以下字符串,该字符串非常接近浏览器结果,但并不完全如此:
({"q":"tes","p":false,"bs":"","s":["特?拉","特殊符号","test","特殊身份","tesco","特?拉汽车","特视网","特殊符号?案大?","testin","特?拉????]});有些字符仍然被"?“取代。伤痕。当我将浏览器的结果复制到Flex并打印出来时,它会被正确地显示出来,所以它不是Flash跟踪中不支持的字符的问题,或者类似的问题。
有趣的事实: Notepad++给出了与Flex中的字节数组方法相同的结果。在NP++中,当将正确/预期的字符串从gbk转换为iso-8859-1时,我得到的字符串与Flex从URL获得的字符串略有不同:
({"q":"tes","p":false,"bs":"","s":["ÌØË¹À","ÌØÊâ·ûºÅ","test","ÌØÊâÉí·Ý","tesco","ÌØË¹ÀÆû³µ","ÌØÊÓÍø","ÌØÊâ·ûºÅͼ°¸´óÈ«","testin","ÌØË¹ÀÆû³µ¼Û¸ñ"]});在我看来,Flex应该得到这个字符串,让ByteArray方法创建正确的结果(在浏览器中可见)。因此,我认为这可能有三个原因:
任何帮助/想法都将不胜感激。谢谢。
发布于 2014-12-08 13:55:00
设法找到问题和解决办法,希望这将有助于其他人在未来。
结果显示,使用HTTPService自动将结果转换为字符串,这可能会将一些字节压缩为单个字符。这就是为什么我得到的是第一个结果,而不是第三个结果。我需要做的是以二进制形式获得结果,而HTTPService没有这种类型的resultFormat,但是URLLoader有。
这将返回正确的字符串,浏览器也将显示该字符串。
https://stackoverflow.com/questions/27351359
复制相似问题