我想使用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價值是什麼意思? –