2011-12-08 13 views
1

私は、人があらゆる場所からコピー/貼り付けを行うコンテンツ(ほとんどの場合Word文書)から生成されるXML文書を持っています。U + 001Aを含むXML文書のエンコーディング

それは次のようになります。私はいつもUTF-8またはiso-8859-1のエンコーディングを使用しましたが、今誰かがなくなって、コピー/ Unicode文字U+001A0x1a)貼り付けると、私は見つけることができません

<?xml version="1.0" encoding="UTF-8"?> 
<response> 
    <data> <![CDATA[ 
     (whatever was pasted) 
    ]]></data>   
</response> 

それを受け入れるエンコーディング使用するエンコーディングの種類にかかわらず、XMLファイルを(Firefox、Internet Explorer、XML Spyなど)に入れたものはすべて無効だと言います。

ファイルが停止するのを防ぐために使用できるエンコーディングがありますか、またはこれらの文字を1つずつ取り除く必要がありますか?

答えて

6

U + 001Aは、XMLドキュメントの有効な文字ではありません。 the specificationに応じて文字の有効範囲は次のとおりです。

Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */ 
+0

私は聞くことを望んでいなかったが、ありがとう。 「確かに非常に速く修正する」という別のものは、別の長い一日に変わるようです。 –

1

前処理を行い、元のデータ、エンコーディングUnicode文字は、XML文書を自分でサポートされていません。例えば、HTMLの文字エンコーディングを使用します。

<?xml version="1.0" encoding="UTF-8"?> 
<response> 
    <data> <![CDATA[This is &#x1a; a test.]]></data>   
</response> 

あなたが戻って正しいUnicode文字にHTMLエンコーディングを変換するために戻って読んだときにデータをインプロセスに投稿する必要があります。

3

文字U + 001Aは、XMLで禁止されているほとんどの(U + 001Aを含む)C0コントロール領域にあります。誰もが意図的にそれを入力したことはありえない。むしろ、それは、文字コード変換を実行し、不正なデータ(例えば、ソース符号化において定義された意味を有さないバイト)を検出するときに、ソフトウェアによって生成された。 U + 001A(SUBSTITUTE)文字は、このような用途に使用されます。私のquick reference to C0 Controlsを見てください。

U + 001Aを生成した変換(または他のプロセス)を追跡して修正できない場合は、U + FFFD置換文字で置き換えることをお勧めします。 U + 001AのUnicodeに相当します。 (もちろん、後者はUnicodeでも可能ですが、多くのコンテキストでは許可されません)。グリフはいくつかのフォントでしか存在しますが、可視グリフがあります。詳細についてはfileformat.info entry on U+FFFDをご確認ください。

ここで重要な点は、U + 001AをU + FFFDに変更すると、XMLでデータを受け入れることができ、文字レベルのデータエラーに関する情報が保持されることです。

関連する問題