0

Excelシートからいくつかのものを読み取り、XMLを作成するJavaプログラムがあります。

簡単に言えば、有効な XML 文字のみを含み、エンコードする必要のある文字を適切にエンコードするために、XML 内に含まれる文字列が必要です。

質問: ファイルに書き込む前にこれらの文字を Java でエンコードするにはどうすればよいですか?

ありがとう!

注: これらは、「(“)および」(”)などの文字と、その他の同様の文字です。

4

2 に答える 2

2

XMLをUTF-8形式で書きたいという質問を理解しているので、次のようにUTF-8でファイルを書き込むことは、Javaを使用した標準的な方法ですOutputStreamWriter

File f = new File("test.xml");
BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f), "UTF-8"));
wr.write("xml text here");

UTF-8 は、すべての文字 Unicode 文字セットを表すことができる可変幅エンコーディングです。http://en.wikipedia.org/wiki/UTF-8#Descriptionおよびhttp://en.wikipedia.org/wiki/Quotation_mark#を参照してください。 Smart_quotes .

さらに、あなたのケースでは、「 を 」に変換したいようで、UTF-8 変換中にこれが処理されることを望んでいるようです (私は間違っているかもしれませんが、これはあなたの応答から私が認識したものです)。しかし、XML には「? もしそうなら、それは別の問題であり、何が議論されているかです。

編集: 明確にするために、XSL に " があり、記述された XML も UTF-8 エンコーディングに関する限り同じ文字を持っている場合、問題はないと思います。

次の XML は、Unicode 文字を含む有効な XML です。

<?xml version="1.0" encoding="UTF-8"?>
<root>
<summary>This is a summary, text may contain &#x201C;Unicode&#x201D; characters</summary>
</root>

文字セットがサポートされている場合、任意のブラウザーで開きます。XML は正しくレンダリングされます。それ以外の場合、非 XML 準拠の文字の場合、次のエラーがスローされます (少なくとも Chrome では、ブラウザーに依存する可能性があります)。

CharRef: 無効な 10 進数値

XML で有効な文字セットの範囲については、http ://www.w3.org/TR/REC-xml/#charsets を参照してください。

文字 ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
/* サロゲート ブロック、FFFE、および FFFF を除く、任意の Unicode 文字。*/

非準拠の XML 文字セットについては、http ://www.w3.org/TR/unicode-xml/#Charlist を参照してください。

<,>," を XML で <,>," のように記述する必要があるのと同様に、Unicode文字は次のように記述する必要があります: &#xNNNN; ここで、NNNN は Unicode 16 進数です。上記のサンプル XML を参照してください。

そのため、プログラムで XML を記述しているときに、そのような文字に遭遇した場合は &#x 形式に変換するなど、そのような文字を明示的に処理する必要があります。

于 2013-04-23T15:21:40.770 に答える