![]() |
|
||||||||||
|
|||||
|
Регистрация: May 2009
Сообщений: 83
|
Добрый вечер.
Дорогие друзья пордскажите, пожалуйста, как строчку во Флеше можно перекодировать (см. тему).Спасибо. |
|
|||||
|
вроде как спомощью ByteArray
|
|
|||||
|
таких функций как например в php, в AS3 нет. Данные вы наверное получаете от скрипта, поэтому лучше это делать на сервере.
|
|
|||||
|
Регистрация: May 2009
Сообщений: 83
|
Дело в том, что данные вводятся непосредственно с клавиатуры прямо во флеш приложении. И потом часть данных нужно отправить в одной кодировке, часть в другой. И нет возможности по определенным причинам перекодировать эти данные на сервере.
|
|
|||||
|
Из 1251 в UTF
var loader:URLLoader = new URLLoader(new URLRequest("1251.txt")); loader.dataFormat = URLLoaderDataFormat.BINARY; loader.addEventListener(Event.COMPLETE, loaderCompleteHandler); function loaderCompleteHandler(event:Event):void { var ba:ByteArray = loader.data as ByteArray; var str = new String(ba.readMultiByte(ba.length, 'windows-1251')); trace(str); } package { import flash.display.*; import flash.text.*; import flash.events.*; import flash.geom.*; import fl.events.*; import fl.controls.*; import flash.net.*; import flash.utils.*; import fl.controls.dataGridClasses.*; import fl.data.*; import fl.controls.listClasses.*; /** * ... * @author http://www.murmadillo.tut.su/ */ public class DocSaveAs1251 extends Sprite { private var txt:TextArea, saveBtn:Button, loader:URLLoader, strUTF:String='абвгдежзийклмнопрстуфхцчшщъыьэюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ', hexWIN1251:Array = [0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF], charUTFArr:Array = []; public function DocSaveAs1251() { graphics.beginFill(0xffffff); graphics.drawRect(0, 0, 550, 400); addChild(txt = new TextArea); txt.setSize(500, 350); txt.move(25, 10); addChild(saveBtn = new Button); saveBtn.label = 'сохранить как win1251'; saveBtn.move(250, 370); saveBtn.width = 200; saveBtn.addEventListener(MouseEvent.CLICK, saveBtnClickHandler); loader = new URLLoader(new URLRequest("utf.txt")); loader.dataFormat = URLLoaderDataFormat.BINARY; loader.addEventListener(Event.COMPLETE, loaderCompleteHandler); var i:int; for (i = 0; i < strUTF.length; i++) charUTFArr[i] = strUTF.charAt(i); } private function loaderCompleteHandler(event:Event):void { txt.text = loader.data; } private function saveBtnClickHandler(evt:MouseEvent):void { var ba:ByteArray; var saveFile:FileReference; ba = new ByteArray(); var i:int, j:int; var strUtf:String = txt.text; var ch:String; var findTr:Boolean; var rStr:String = '1234567890 - +~ !@#$ % ^ & * ()_ = ":;|\/?!<>{}[]'; var code:int; for (i = 0; i < strUtf.length; i++) { findTr = false; ch = strUtf.charAt(i); for (j = 0; j < charUTFArr.length; j++) { if (ch == charUTFArr[j]) { ba.writeByte(hexWIN1251[j]); findTr = true; break; } } if (!findTr) { code = ch.charCodeAt(); if (new RegExp(ch).test(rStr)) { //trace('testOK'); ba.writeByte(code); } //a-z A-Z if ((code >= 97 && code <= 122) || (code >= 65 && code <= 90)) ba.writeByte(code); if (code==13) ba.writeByte(10);//Enter if (code==9) ba.writeByte(9);//табуляция } } saveFile = new FileReference; try { saveFile.save(ba,"text1251.txt"); } catch (e:Error) { trace(e) } } } } |
|
|||||
|
Регистрация: May 2009
Сообщений: 83
|
Спасибо огромное!
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Alex Lexcuk, да вы любитель велосипеды изобретать
![]() А средствами всё того же ByteArray вы кодировку изменить не смогли? Или вы по книжке до метода writeMultiByte ещё не дошли? ![]() |
|
|||||
|
стервочка (я мужик)
|
Alex Lexcuk, а writeMultyByte сломался?
|
|
|||||
|
>>а writeMultyByte сломался?
Нет, меня просто прикалует печатать package { import flash.display.*; import flash.text.*; import flash.events.*; import flash.geom.*; import fl.events.*; import fl.controls.*; import flash.net.*; import flash.utils.*; /** * ... * @author http://www.murmadillo.tut.su/ */ public class DocSaveAs1251 extends Sprite { private var txt:TextArea, saveBtn:Button, loader:URLLoader; public function DocSaveAs1251() { addChild(txt = new TextArea); txt.setSize(500, 350); txt.move(25, 10); addChild(saveBtn = new Button); saveBtn.label = 'сохранить как win1251'; saveBtn.move(250, 370); saveBtn.width = 200; saveBtn.addEventListener(MouseEvent.CLICK, saveBtnClickHandler); loader = new URLLoader(new URLRequest("utf.txt")); loader.dataFormat = URLLoaderDataFormat.BINARY; loader.addEventListener(Event.COMPLETE, loaderCompleteHandler); } private function loaderCompleteHandler(event:Event):void { txt.text = loader.data; } private function saveBtnClickHandler(evt:MouseEvent):void { var ba:ByteArray; var saveFile:FileReference; ba = new ByteArray(); var strUtf:String = txt.text; ba.writeMultiByte(strUtf, 'windows-1251'); saveFile = new FileReference; try { saveFile.save(ba,"text1251.txt"); } catch (e:Error) { trace(e) } } } } Я ж многово не знаю, а тот скриптик из Си. А книги мне не надо, и так можно разобраться. |
![]() |
![]() |
Часовой пояс GMT +4, время: 08:20. |
|
|
« Предыдущая тема | Следующая тема » |
|
|