2016-07-09 55 views
2

我想使用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(布尔,元组(字符串,字符串))的字符相关的代理,描述该字符是否是表情符号,然后是两个代理关联。

虽然,每当我用我的代码时,表情符号,不会出现像表情符号,而是像小广场上,因此导致行不通的事情:

Square

我该如何解决这个问题?

PS:CharToSurrogates方法可以在这里找到:http://pastebin.com/LiBB1q2p

+0

你确定你的IDE可以显示表情吗?通常在字体不包含该字符时显示该方块。你检查过该角色的实际UNICODE值吗?还有,为什么在比较字符时使用'ToString()'和比较字符串呢? –

+0

完全不相关,但我在最近的一个项目中大量使用了XmlDocument,后来有人建议我应该使用XDocument(似乎还有更多LINQ类和现代特性)。我在兔子洞下方太远了。至于表情符号,就像@Sami建议的那样,获得unicode的价值,也许存储和打印可能会更好 –

+0

好吧,我不确定它可以显示表情符号......但是,如果我使用两个不同的表情符号并调用charToSurrogates方法,我得到两次相同的返回值,这是(False,(“FFFD”,“”))。 ToString的事情只是为了测试实际。 unicode价值是什么意思? –

回答

0

IDE可以不(至少矿不能)显示在调试器的表情符号。我写了这个测试来看看它保存时的样子。

Dim someXML As XElement 

    someXML = <root> 
        <emoji></emoji> 
       </root> 
    ' 
    Dim emoji As String = "" 
    someXML.<emoji>.Value = emoji 
    someXML.Save("C:\Users\xxxxxxxx\Desktop\emoji.xml") 

当我看着文件(双击文件名)时,表情符号显示正确。

我使用了从这里'浏览器'栏列出的项目,http://unicode.org/emoji/charts/emoji-list.html,他们似乎工作,至少是我尝试过的。

Dim emoji As String = ""