当我尝试将字节转换为字符时,如果遇到unicoder number 0(NUL),flex会停止转换。为什么会这样? Flex能够转换1-256个除0以外的unicode数字。 在以下示例中,Alert窗口不显示任何文本,因为参数从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无法转换unicode 0字符? 暂时,我将它们转换为32(空格),如果它是0。 提前谢谢。
答案 0 :(得分:0)
好问题!我在我的Flash Builder 4.6上试试。
据我所知是String.fromCharCode(num),num取决于keycode
如果你的数字从1~Max开始,而不包括在键码列表中,
它将返回空格。但是如果num为0,fromCharCode将返回undefined ref。
但是你从这个字符串数组中获取字符串长度:
{undefined,h} .length = 2
{undefined,h} make to string = undefined。记住它为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
对于字符串ref的每一个将是:
h + X = h + undefined。
我猜它的原因是String.fromCharCode
功能没有抓住
if(codenum == 0){return whitespace}
它可以用作开关或用于或以其他方式从1开始编码。
答案 1 :(得分:0)
C字符串以null
字节\0
字符终止。
与C类似,我相信ActionScript会将其解释为null terminated string。
答案 2 :(得分:0)
因为0字节实际上不是字符串char。如果您正在使用二进制数据,请将其保留在ByteArray
中