2012-06-27 3 views
2

Когда я пытаюсь преобразовать байты в символы, flex останавливает преобразование, если встречается с номером unicoder 0 (NUL). Почему это так? Flex может конвертировать 1-256 номеров юникода, кроме 0. В следующем примере окно предупреждения не отображает текст, поскольку параметры начинаются с 0 при формировании строкового сообщения из номеров юникода.Почему строка flex НЕ поддерживает unicode 0?

<?xml version="1.0" encoding="utf-8"?> 
<s:Application name="Alert" xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" creationComplete="init();"> 
    <s:controlBarContent> 
     <s:Button id="btn" 
        label="Show alert" 
        click="init();"/> 
    </s:controlBarContent> 

    <fx:Script> 
     <![CDATA[ 
      import mx.controls.Alert; 

      protected function init():void { 
       // if string message value is String.fromCharCode(78,0);, then Alert displays as N 
       //Here, since message starts with unicode character 0, Alert displays nothing. 
       //Flex string is getting stopped if it encounters unicode 0, why is it so? 
       //but flex string supports other contorl ascii characters except NUL (0) 
       var message:String=String.fromCharCode(0, 78, 1); 
       Alert.show(message, "", Alert.YES | Alert.NO | Alert.OK | Alert.CANCEL); 
      } 
     ]]> 
    </fx:Script>  
</s:Application> 

Я не уверен, почему flex не может преобразовать символ Юникода 0? Временно, я преобразовываю их в 32 (пустое пространство), если это 0. Заранее спасибо.

ответ

0

Хороший вопрос !. Я пробую это на своем Flash Builder 4.6.

Как я знаю, String.fromCharCode (число), кол-во зависит от keycode

если ваш получить НЮМ начинаются с 1 ~ Макс и не включить в список скан-коду,

он возвращает пустое пространство. Но если число равно 0, fromCharCode вернет неопределенный номер ссылки.

Но вы облако Получить длину строки из этого массива строк:

{неопределенный, д} .Length = 2

{неопределенный, H} сделать нанизывать = не определен. помните, как X.

я покажу вам Math

h+X = h+undefined.

вы могли бы попробовать это:

var str:String = String.fromCharCode(0,104); 
var str1:String = String.fromCharCode(1,104); 
var str2:String = String.fromCharCode(104,0,104); 
Alert.show(str); 
Alert.show(str.length.toString()); 
Alert.show(str1); 
Alert.show(str1.length.toString()); 
Alert.show(str2); 
Alert.show(str2.length.toString()); 

Вы увидите str2 показать вам что-то другое.
{ч, не определено, ч} .length = 3

для каждой строки это для исх будет:

Н + Х = Н + не определено.

Я думаю, это причина заключается String.fromCharCode функция не поймать

if(codenum == 0){return whitespace} 

Он может использовать в качестве переключателя или или другим способом начать код Num на 1.

0

строки C завершаются null байт \0 знак.

Как и в C, я считаю, что ActionScript интерпретирует это как null terminated string.

0

Поскольку 0 байт на самом деле не является строковым символом. Если вы работаете с бинарными данными, держите его в ByteArray

Смежные вопросы