2014-12-08 2 views
0

Flex (및 HTTPService)를 사용하여 URL에서 데이터를로드합니다.이 데이터는 GBK charset으로 인코딩됩니다. 이러한 URL의 좋은 예는 this one입니다.AS3 : GBK 문자 집합으로 변환

브라우저는 데이터가 GBK charset에 있음을 확인하고 표시되는 중국어 문자를 사용하여 텍스트를 올바르게 표시합니다. 그러나, 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 추적이나 그 밖의 다른 곳에서는 지원되지 않는 문자가 문제가되지 않습니다.

재미있는 사실 : 메모장 ++는 Flex의 bytearray 방식과 거의 비슷하지만 결과는 비슷합니다. ISO-8859-1로 GBK에서 올바른/예상 문자열을 변환 할 때 또한 NP ++에, 나는 한 플렉스는 약간 다른 문자열을 얻고하면 URL에서 점점 :

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

이 나에게 보인다 string은 Flex 이되어야하고, ByteArray 접근법이 올바른 결과 (브라우저에서 볼 수 있음)를 생성해야하는 문자열입니다. 그래서이 가능 3 개 원인을 참조하십시오

  1. 뭔가가 약간 다른 (가능성)로 원인 플렉스의 URL에서 오는 데이터에 무슨 일이 일어나고
  2. 수신 된 문자 집합은 실제로 ISO-8859- 아니다 1, 그러나 또 다른 비슷한 문자셋
  3. 인코딩과 문자셋의 차이점을 완전히 이해하지 못했기 때문에이 문제를 이해하지 못할 수도 있습니다.

어떤 도움이나 생각이라도 대단히 감사하겠습니다. 감사합니다.

답변

1

문제와 해결 방법을 찾아 관리 했으므로 앞으로 다른 사람에게 도움이되기를 바랍니다.

HTTPService를 사용하면 자동으로 결과가 String으로 변환되어 일부 바이트 쌍을 단일 문자로 압축 할 수 있습니다. 그래서 3 번째 대신에 첫 번째 결과를 얻었습니다. 내가해야 할 일은 바이너리 형식으로 결과를 얻는 것이고 HTTPService는 resultFormat이 유형이 없다.; 그러나 URLLoader는 않습니다.

  1. 은 URLLoader
  2. 이 URLLoaderDataFormat.BINARY에은 URLLoader의 DATAFORMAT 속성을 설정
  3. 로딩 한 후, 데이터 속성은이 ByteArray로 돌아갑니다와 HTTPService를 교체합니다.이 바이트 배열을 추적 (또는 그것을 String으로 변환)하면 HTTPService가 얻는 것과 같은 결과가 표시되지만 여전히 잘못된 것입니다. 실제로 바이트 배열은 바이트에 대한 올바른 데이터 바이트 (바이트 배열의 length 속성 변환 된 문자열의 크기보다 약간 큽니다).
  4. 그래서 당신은 "GBK"캐릭터 세트 사용이 된 ByteArray에서 문자열을 읽을 수 있습니다

    byteArray.readMultyByte (byteArray.length, "GBK를");

이렇게하면 브라우저에 표시되는 올바른 문자열이 반환됩니다.

관련 문제