as3 中的 XMLSocket 类,我尝试读取包含特殊字符(包括中文符号)的字符串,该字符串由使用 c# 中的套接字类进行通信的 .NET 服务器发送。日志正确显示数据。但是当我在 as3 中得到它时,所有特殊字符都被替换为"?"。我以为这会是一个字体问题。但是尝试嵌入字体并得到了相同的结果。如果我使用 URLLoader 读取具有特殊字符的文件,那么一切都是正确的。但是当我尝试使用 flash XMLSocket 类读取 .net 服务器发送的数据时,特殊字符被替换了。我们是否需要在 .net Socket 类或某个地方设置任何编码,或者可以从客户端(flash as3)本身解决?
提前致谢
一些快速的示例代码,您可以尝试使用 XML 文本。由于我没有服务器向我发送XML或一些套接字代码设置,因此我将像这样重新创建您收到的数据...
<xml>
<root>
<name>chinese</name>
<value>嗨</value>
</root>
</xml>;
最重要的是只使用一种字体(Arial)在一个文本字段中显示英文和中文文本。希望它对你有用,并给你一个起点。另请注意,在IDE(代码和跟踪)中,汉字是一个正方形(▖
),但Arial字体可以将其显示为真正的字符形状(嗨
)。
测试代码(只需粘贴和编译)...
// # 1) Make text box to display XML content
var txtBox : TextField = new TextField();
var txtFmt : TextFormat = new TextFormat();
txtFmt.font = "Arial"; txtFmt.color = 0x00CCFF;
//txtFmt.align = TextFormatAlign.CENTER;
txtFmt.bold = true; txtFmt.size = 35;
txtBox.selectable = true;
txtBox.defaultTextFormat = txtFmt;
txtBox.width = 200; txtBox.height = 40;
addChild (txtBox);
// #2 Make XML (You already have this part coming from Socket & Server)
var myXML : XML = "<xml > <root> <name>chinese</name> <value>嗨</value> </root> </xml>";
//trace( "check name : " + ( myXML.root.name) );
//trace( "check value : " + ( myXML.root.value) );
// # 3 Update text box on stage to see output
txtBox.text = myXML.root.name + " " + myXML.root.value;
最后我找到了这个错误。我的 .NET 服务器使用的是Default
编码,根据服务器运行的系统,该编码会有所不同。我尝试对服务器使用 UTF8 编码,它起作用了。如果服务器发送以 UTF8 编码的文本,那么XMLSocket
也将能够获取 Unicode 字符,因为它使用 UTF8。添加我的引用编码.默认属性