如何将不可打印的ascii字符转换为flash的可读字符串

时间:2013-12-06 12:36:11

标签: actionscript-3 flash-cs6 extended-ascii

我在从外部XML读取文本时遇到问题。 对于(32-127)的ascii字符,Flash似乎没有问题,但它无法显示扩展字符(128 - 255)。 在那个XML中我有例如“(DEC:132)和”(DEC:147)。 在XML中,这些字符不可见,但仍然存在。 Flash无法显示它们。我的方法是获取每个charCode并将其转换为字符串,但这仅适用于可打印字符。

var textToConvert:String = xml.parameters.text[1].value;
            trace("LENGTH = "+textToConvert.length);
            var test:String="";
            for(var i:int=1;i<textToConvert.length;i++){
                trace(textToConvert.charCodeAt(i));
                //OCT
                trace(textToConvert.charCodeAt(i).toString(8));
                //HEX
                trace(textToConvert.charCodeAt(i).toString(16));
                //HEX
                test += textToConvert.charCodeAt(i).toString(16);
                trace("SYMBOL : " +String.fromCharCode(textToConvert.charCodeAt(i)))
            }
            trace("TEST: "+test);

结果:

  

76

     

114

     

4C

     

符号:L

     

132

     

204

     

84

     

符号:(不可见)

接下来我要做的是将每个char“\ x”的转义序列附加到HEX-Value,然后将其转换为String,但这也不起作用:

s = "\x93\x93\x84\x93\x84";

            ba.writeMultiByte(s,"ASCII");
            trace(s);

这是我的第一个方法(不工作):

var byteArray:ByteArray = new ByteArray();
byteArray.writeMultiByte(textToConvert,"iso-8859-1");
trace("HIER: "+byteArray.readUTFBytes(byteArray.bytesAvailable));

解决这个问题的通用方法是什么?

这是xml,它隐藏了ascii字符(引号)。我想解析节点的值,包括那些字符:

XML-DL

1 个答案:

答案 0 :(得分:0)

内部AS3字符串编码为16位Unicode。他们支持你的角色。它已经正确解码,因为它已经读取了正确的字符代码。

用于输出的字体是否具有能够呈现它的字形?这甚至适用于AS3控制台。你的char不是“空的”,它只是无法绘制它。如果您更改了跟踪以在字符的任一侧包含引号,则会看到它仍然写入空白区域。

如果您使用您知道具有正确支持的字体将其转储到TextField,那么它应该按预期工作。

如果这不符合您的需求,那么您需要进行某种转换。没有普遍接受的库可以执行此操作,因为它取决于您的需求。对于通常需要多个代表它们的单个字符应该怎么办? ø通常被翻译为'oe',但可能不适合固定长度的弦。大多数希伯来语,西里尔语,阿拉伯语等字母都没有相应的字母。您想对这些规则适用哪些规则?您需要确定所需的内容,然后进行符合这些要求的转换(或选择符合要求的库)。