2016-07-09 5 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が含まれているという問題があります。ファイルを読むときにノードを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 

コンテンツはemojisを含む可能性があります。ここでの目標は、絵文字をXMLエンティティに変換して、変換する絵文字が必要なAndroidアプリケーションでその絵文字を読むことができるようにすることです。 CharToSurrogatesメソッドは基本的に、文字が絵文字かどうかを記述したタプル(Of Boolean、Tuple(Of String、String))を返す文字に関連付けられたサロゲートを取得し、次にその2つのサロゲートを関連付けます。

Square

私はこれをどのように修正することができます:私は私のコードを使用するたび

ものの、絵文字は、このようなことが仕事決してさせ、絵文字のように少し正方形のように表示されないのですか?

PS:CharToSurrogates方法がここで見つけることができる:http://pastebin.com/LiBB1q2p

+0

IDEでemojisを表示できますか?その正方形は通常、フォントにその文字が含まれていない場合に表示されます。あなたはキャラクターの実際のユニコード値をチェックしましたか?また、文字を比較できるときに 'ToString()'を使って文字列を比較するのはなぜですか? –

+0

全く関係ありませんが、私は最近のプロジェクトでXmlDocumentを頻繁に使用しましたが、後で誰かがXDocumentを使うべきだと提案しました(もっと多くのLINQのような機能があるようです)。私はウサギの穴をあまりにも遠くまで歩いていた。 emojisのように@Samiのように、ユニコードの値を取得し、おそらく保存して&印刷することがより良いかもしれない印刷 –

+0

まあ私はそれがemojisを表示することができません...しかし、私は2つの異なる絵文字を使用してcharToSurrogates両方のメソッドで、同じ戻り値を2回取得します(False、( "FFFD"、 ""))。 ToStringのことは実際にテストすることでした。ユニコードの値はどういう意味ですか? –

答えて

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 = ""