2016-07-09 52 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 = ""