Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 如何将不可打印的ascii字符转换为flash的可读字符串_Actionscript 3_Flash Cs6_Extended Ascii - Fatal编程技术网

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

Actionscript 3 如何将不可打印的ascii字符转换为flash的可读字符串,actionscript-3,flash-cs6,extended-ascii,Actionscript 3,Flash Cs6,Extended Ascii,我在从外部XML读取文本时遇到问题。 Flash似乎对(32-127)中的ascii字符没有问题,但它无法显示扩展字符(128-255)。 在该XML中,我有例如“DEC:132”和“DEC:147”。 在XML中,这些字符不可见,但仍然存在。Flash无法显示它们。我的方法是获取每个字符码并将其转换为字符串,但这只适用于可打印字符 var textToConvert:String = xml.parameters.text[1].value; trace("LENGTH

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

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);
这是我的第一个方法(不起作用):

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

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


在内部,AS3字符串被编码为16位Unicode。它们支持您的字符。它还正确地解码了它,因为它读取了正确的字符代码

用于输出的字体是否有能够呈现它的字形?这甚至适用于AS3控制台。您的字符不是“空”的,它只是无法绘制。如果您更改跟踪以包含字符两侧的引号,您将看到它仍然写入空的空格

如果您将其转储到文本字段,而不是使用您知道具有正确支持的字体,那么它应该可以正常工作


如果这不能满足您的需要,那么您将需要进行某种转换。由于这取决于您的需要,因此没有普遍接受的库来进行转换。对于通常需要多个字符来表示它们的单个字符,应该如何处理?ø通常被翻译为“oe”,但这可能不适用于固定长度的字符串e不是大多数希伯来语、西里尔语、阿拉伯语等字母的等价词。你想对这些字母应用什么规则?你需要决定你需要什么,然后进行符合这些要求的转换(或者选择一个符合这些要求的库).

我只想将节点值转储到文本字段中。我不知道要做什么转换。文本字段应显示所有字符。例如字符串。fromCharCode(132)应显示“但它不显示”。嵌入字体后,我使用Verdana和Times New Roman进行测试。另一个示例:带有字符串“Hello:”“END”我在文本字段中看到“Hello:END”。xml中的字符串看起来很相似,引号以某种方式编码(在那里,但不可见)。132是中的控件,它不会显示,也不打算显示。字符是8222(201E)。当以UTF8查看时,我在上载的XML文件的任何地方都看不到此字符。我不确定这是否是闪存问题。如果使用值节点中的箭头键,您将看到光标在相当长的时间内没有移动。这些是XML中编码的字符。但是,如果我直接在XML中键入它(ALT+132)然后运行.fla文件,我得到字符代码8222,它是拉丁文编码的,并正确显示在文本字段中。现在的问题是,如何将扩展ascii字符转换为拉丁文1?byteArray.writeMultiByte(textToConvert,“iso-8859-1”);似乎不起作用。如前所述,UTF8没有完全转换为ASCII,只是根据您的输入和输出需求,存在有效性不同的近似值。然而,我认为在这种情况下,这并不重要。如果内容在进入Flash之前没有正确表示您的预期,那么肯定是part您应该修复吗?您的XML标记为UTF8,当解码为UTF8时,我得到的内容与Flash(正确)读取的内容相同。
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));