0

次のメソッドを使用して XML を作成しています。

Private mXmlDocSave As XmlDocument

Using sw As XmlTextWriter = New XmlTextWriter(pSaveLocation & "\" & mFolderName & "\" & mFileName & ".kml", System.Text.Encoding.Default)
    mXmlDocSave.Save(sw)
End Using

XMLを解析する次の方法:

 Private mKMLDocument As New Xml.Linq.XDocument()
 mKMLDocument = XDocument.Parse(pXML)

UTF-8 エンコーディングに変更System.Text.Encoding.DefaultするSystem.Text.Encoding.UTF8と、XML の解析が失敗します。しかし、System.Text.Encoding.DefaultANSIエンコーディングに使用すると、XMLの解析は成功します。æ,Ü,¥ などの特殊文字をサポートするには、UTF-8 エンコーディングを使用する必要があります。

UTF-8 エンコーディングを使用してこの問題を解決する方法

さらに、System.Text.Encoding.DefaultANSIエンコーディング用のXMLも作成しました。そうですか

<?xml version="1.0" encoding="UTF-8"?> 

頂点で。そうじゃないかな

<?xml version="1.0" encoding="ANSI"?>

------------編集済み-------------------------

次のコードを使用して pXml を読み取ります

Public Sub LoadXML() 

Dim mKMLDocument As New Xml.Linq.XDocument()
Dim mKMLString As String
 Dim pXML As String
Dim UploadedFile As DevExpress.Web.ASPxUploadControl.UploadedFile
pXML = Encoding.UTF8.GetString(UploadedFile.FileBytes)
        If String.IsNullOrEmpty(pXML) Then
            mKMLString = ""
            mKMLDocument = Nothing

        Else
            mKMLString = pXML
            mKMLDocument = XDocument.Parse(pXML)
        End If

ありがとう

Bibek Gautam カトマンズ

4

1 に答える 1

0

エンコーディングが正しくないこと以外に、問題が実際にどこにあるのかを知るのは困難です。

これは、あなたの質問からわかる限り、情報の流れです。

  1. Xml ドキュメントは、最初に XmlDocument に格納されます。ここでは問題ありません。
  2. Xml ドキュメントは、XmlTextWriter を使用してファイルに保存されます。ここは間違いなく問題ありません。XmlTextWriter は、指定された Encoding でファイルを書き込み、それに応じて XML 宣言を設定します。
  3. ファイルは、DevExpress を使用して Web サーバーにアップロードされます。これより前に、ファイルは何らかの方法で変更されましたか? ブラウザで送信しますか、それともプログラムで送信しますか?
  4. ファイルの内容は、Encoding.GetString() を使用して文字列に変換されます。ここでの潜在的な問題は、サーバーがクライアントとは異なるエンコーディングを使用していることです。これは、おそらく起こっていることです。
  5. 文字列は、XDocument を使用して Xml に解析されます。手順 4 が正しく実行されていると仮定すると、ここでは問題ありません。

いくつかの観察:

System.Text.Encoding.Default は "ANSI" ではありません。ANSI は有効な Windows エンコーディングではないと確信しています。私のシステムでは、デフォルトのエンコーディングは「Windows-1252」です。これは、特定の Windows インストールの言語設定の構成に基づいて変更されます。どこでも Encoding.UTF8 を使用すると、問題が解決するはずです。

問題は、次の 2 つの場所のいずれかにある可能性があります。

  1. ファイルがブラウザを使用してアップロードされた場合: 人的エラーが関与している可能性があります。つまり、アップロードされたファイルは、UTF8 エンコーディングで作成されたファイルではありません。
  2. ファイルがプログラムでロードされている場合。プログラムは、おそらくファイルのバイト コンテンツをストリーミングする代わりに、マルチパート ポストで送信する前にファイルを文字列に読み取ることによって、ファイルのエンコーディングを変更しています。

デバッグするには: デバッガーで pXml の内容を確認します。ファイルの内容から、何が問題なのかがわかります。

于 2013-05-30T06:21:02.853 に答える