2

当我尝试将字节转换为字符时,如果遇到 unicoder 编号 0 (NUL),flex 会停止转换。为什么会这样?Flex 能够转换除 0 以外的 1-256 个 unicode 数字。在以下示例中,警报窗口不显示任何文本,因为参数以 0 开头,同时从 unicode 数字形成字符串消息。

<?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 不能转换 unicode 0 字符?如果为 0,我暂时将它们转换为 32(空白)。提前致谢。

4

3 回答 3

0

好问题!。我在我的 Flash Builder 4.6 上试用它。

据我所知是 String.fromCharCode(num),num 取决于keycode

如果您的 num 从 1~Max 开始并且它不包含在键码列表中,

它将返回空格。但是如果 num 为 0,fromCharCode 将返回 undefined ref。

但是你从这个字符串数组中获取字符串长度:

{undefined,h}.length = 2

{undefined,h} 使字符串 = 未定义。记为 X。

我会告诉你数学

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 向你展示了一些不同的东西。
{h,undefined,h}.length = 3

对于每个 this for string ref 将是:

h+X = h+未定义。

我猜它的原因是String.fromCharCodeFunction don't catch

if(codenum == 0){return whitespace}

它可以用作 switch 或 for 或其他方式,以 1 开始代码 num。

于 2012-07-04T06:48:04.747 回答
0

C 字符串以null字节\0字符结尾。

与 C 类似,我相信 ActionScript 将其解释为以空字符结尾的字符串

于 2012-07-04T07:04:20.227 回答
0

因为 0 字节实际上不是字符串 char。如果您正在处理二进制数据,请将其保存在ByteArray

于 2012-07-04T07:11:09.550 回答