首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AS3:转换到GBK字符集

AS3:转换到GBK字符集
EN

Stack Overflow用户
提问于 2014-12-08 04:18:32
回答 1查看 258关注 0票数 0

使用Flex (和HTTPService),我从一个URL加载数据,这些数据是用GBK字符集编码的。这样一个URL的一个很好的例子是这一个

浏览器获取数据位于GBK字符集中,并使用出现的中文字符正确显示文本。但是,Flex将将数据保存在不同的字符集中,而它恰好如下所示:

代码语言:javascript
复制
({"q":"tes","p":false,"bs":"","s":["ÌØ˹À­","ÌØÊâ·ûºÅ","test","ÌØÊâÉí·Ý","tesco","ÌØ˹À­Æû³µ","ÌØÊÓÍø","ÌØÊâ·ûºÅͼ°¸´óȫ","testin","ÌØ˹À­Æ۸ñ"]});

我需要正确地将文本更改为浏览器显示的相同字符串。我已经在使用ByteArray,使用“iso-8859-1”是迄今为止效果最好的:

代码语言:javascript
复制
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");

这将创建以下字符串,该字符串非常接近浏览器结果,但并不完全如此:

代码语言:javascript
复制
({"q":"tes","p":false,"bs":"","s":["特?拉","特殊符号","test","特殊身份","tesco","特?拉汽车","特视网","特殊符号?案大?","testin","特?拉????]});

有些字符仍然被"?“取代。伤痕。当我将浏览器的结果复制到Flex并打印出来时,它会被正确地显示出来,所以它不是Flash跟踪中不支持的字符的问题,或者类似的问题。

有趣的事实: Notepad++给出了与Flex中的字节数组方法相同的结果。在NP++中,当将正确/预期的字符串从gbk转换为iso-8859-1时,我得到的字符串与Flex从URL获得的字符串略有不同:

代码语言:javascript
复制
({"q":"tes","p":false,"bs":"","s":["ÌØË¹À­","ÌØÊâ·ûºÅ","test","ÌØÊâÉí·Ý","tesco","ÌØË¹À­Æû³µ","ÌØÊÓÍø","ÌØÊâ·ûºÅͼ°¸´óÈ«","testin","ÌØË¹À­Æû³µ¼Û¸ñ"]});

在我看来,Flex应该得到这个字符串,让ByteArray方法创建正确的结果(在浏览器中可见)。因此,我认为这可能有三个原因:

  1. 从URL到Flex的数据发生了一些变化,导致它略有不同(不太可能)
  2. 接收到的字符集实际上不是iso-8859-1,而是另一个类似的字符集。
  3. 我还没有完全理解编码和字符集之间的区别,所以这也许让我无法理解这个问题。

任何帮助/想法都将不胜感激。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-08 13:55:00

设法找到问题和解决办法,希望这将有助于其他人在未来。

结果显示,使用HTTPService自动将结果转换为字符串,这可能会将一些字节压缩为单个字符。这就是为什么我得到的是第一个结果,而不是第三个结果。我需要做的是以二进制形式获得结果,而HTTPService没有这种类型的resultFormat,但是URLLoader有。

  1. 将HTTPService替换为URLLoader
  2. 将URLLoader的URLLoader属性设置为URLLoaderDataFormat.BINARY
  3. 加载后,数据属性将作为ByteArray返回。跟踪此字节数组(或将其转换为字符串)将显示与HTTPService所得到的结果相同的结果,这仍然是错误的,但是在实际中,字节数组实际上保存了字节的正确数据字节(字节数组的长度属性将比转换的字符串的大小稍大一些)。
  4. 因此,您可以使用"gbk“字符集从这个字节数组读取字符串: byteArray.readMultyByte(byteArray.length,"gbk");

这将返回正确的字符串,浏览器也将显示该字符串。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27351359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档