0

Java プログラムを使用して、株主の xml を作成しています。生成されたxmlは次のようになります-

<?xml version="1.0" encoding="UTF-8" ?>
<urlset>
<url>
 <loc>FirstName-LastName/id/</loc>
</url>
</urlset>

A. Pitkänen など、名前に特殊文字を含む株主がいます。さて、この株主の xml を見ると、次のようになります -

<?xml version="1.0" encoding="UTF-8" ?>
<urlset>
<url>
<loc>/A-Pitk寥n/ELS_1005091/</loc>
</url>
</urlset>

これにより、xml が無効になります。なぜこれが起こっているのですか?Javaプログラムは -

FileWriter fstream = new FileWriter("c:\stock-holders.xml");
final BufferedWriter out = new BufferedWriter(fstream);

try {
    // Making Connection and query the stock holders to get the resultset

        String aId = "";
        String aFName = "";
        String aLName = "";

        out.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
        out.write("<urlset>\n");

        while (rs.next()) {
            String url = "";

            aFName = rs.getString(2);
            if (StringUtils.isNotEmpty(aFName) ) {
                aFName = aFName.trim();
                url += aFName;
            }

            aLName = rs.getString(3);
            if (StringUtils.isNotEmpty(aLName)) {
                aLName = aLName.trim();
                url += "-" + aFName;

            }

            aId = rs.getString(1);
            if (StringUtils.isNotEmpty(aId)) {
                aId = aId.trim();
                url += "/" + aId + "/";
            }

            out.write("<url>\n");
            out.write("<loc>" + url + "</loc>\n");
            out.write("</url>\n");
            out.flush();
        }
        out.write("</urlset>");
        out.close();
    }
4

3 に答える 3

3

XML ファイルは UTF-8 エンコーディングで記​​述されているはずなWriterので、システムのデフォルトのエンコーディングではなく、そのエンコーディングを使用するように を設定する必要があります。

FileOutputStream fstream = new FileOutputStream("c:\stock-holders.xml"); 
OutputStreamWriter writer = new OutputStreamWriter(fstream, "UTF-8");
final BufferedWriter out = new BufferedWriter(writer); 

の使用はまさにこの理由で推奨されないことに注意してくださいFileWriter。デフォルト以外のエンコーディングを使用するように構成することはできません。

また、XML ファイルの作成には、文字列の連結ではなく、既存の API (DOM や StAX など) を使用する方がよいでしょう。たとえば、ソリューションでは、データに XML では無効な文字が含まれている可能性があり、エスケープする必要があることを考慮していません。

于 2012-05-04T19:54:14.597 に答える
1

OSWがエンコーディングとして「utf-8」を指定している場合、OutputStreamWriterに接続されたFileOutputStreamの代わりにFileWriterを使用していることが問題であると思われます

于 2012-05-04T19:52:31.570 に答える
0

もっと短いものを使用できます:

PrintWriter out = new PrintWriter("c:\\stock-holders.xml", "UTF-8");

このコンストラクターは、Java 1.5 以降で使用できます。

ドキュメントには次のように記載されています。

指定されたファイル名と文字セットを使用して、行の自動フラッシュを行わずに、新しい PrintWriter を作成します。この便利なコンストラクターはOutputStreamWriter、提供された文字セットを使用して文字をエンコードするために必要な中間体を作成します。

flush()すべての呼び出しが完了したら、メソッドを呼び出す必要がありますwrite

于 2012-05-04T20:02:47.027 に答える