我想使用XMLDocument来读取XML文件。虽然,我在编码方面遇到了一些问题。我读了这样的XML文档:XML读取和编码问题
Dim xmldoc As New XmlDataDocument()
Dim xmlnode As XmlNodeList
Dim i As Integer
Dim fs As New FileStream(tbFileLocation.Text, FileMode.Open, FileAccess.Read)
xmldoc.Load(fs)
xmlnode = xmldoc.GetElementsByTagName("Message")
For i = 0 To xmlnode.Count - 1
Dim SMSToAdd As New SMS()
For Each Child As XmlElement In xmlnode(i).ChildNodes
Dim Name As String = Child.Name.ToString()
If Name = "Body" Then
ContenuDuMessage = Child.InnerText
End If
Next
'Other things
Next
问题是我的XML文档包含表情符号。当我读取文件时,将节点(使用emojis)放入变量中,然后将它们写入另一个文件,一切按预期工作。虽然,如果我使用以下代码:
Dim Temp As Char() = Content.ToCharArray()
Dim Returned As String = ""
For Each Character In Temp
Dim Result As Tuple(Of Boolean, Tuple(Of String, String)) = CharToSurrogates(Character.ToString())
If Result.Item1 Then
Returned &= "&#" & ConvertHexToDec(Result.Item2.Item1) & "; &#" & ConvertHexToDec(Result.Item2.Item2) & ";"
Else
Returned &= Character
End If
Next
Return Returned
内容是一个节点值,因此它可能包含表情符号。这里的目标是将表情符号转换为XML实体,以便能够在需要转换表情符号的Android应用程序中读取它。 CharToSurrogates方法基本上只是获取与返回一个Tuple(布尔,元组(字符串,字符串))的字符相关的代理,描述该字符是否是表情符号,然后是两个代理关联。
虽然,每当我用我的代码时,表情符号,不会出现像表情符号,而是像小广场上,因此导致行不通的事情:
我该如何解决这个问题?
PS:CharToSurrogates方法可以在这里找到:http://pastebin.com/LiBB1q2p
你确定你的IDE可以显示表情吗?通常在字体不包含该字符时显示该方块。你检查过该角色的实际UNICODE值吗?还有,为什么在比较字符时使用'ToString()'和比较字符串呢? –
完全不相关,但我在最近的一个项目中大量使用了XmlDocument,后来有人建议我应该使用XDocument(似乎还有更多LINQ类和现代特性)。我在兔子洞下方太远了。至于表情符号,就像@Sami建议的那样,获得unicode的价值,也许存储和打印可能会更好 –
好吧,我不确定它可以显示表情符号......但是,如果我使用两个不同的表情符号并调用charToSurrogates方法,我得到两次相同的返回值,这是(False,(“FFFD”,“”))。 ToString的事情只是为了测试实际。 unicode价值是什么意思? –