转换XML不起作用UTF-8 XMLOutputter Java

时间:2019-02-28 07:55:20

标签: java xml utf-8

我已经看到有关同一问题的其他问题,但仍然出现错误。 Hier是我尝试修改exosting xml文件的一小部分代码。但是它会修改文本中的某些字符。

fetchItems()

我尝试修改的一个小型xml文件(在这种情况下,只需复制)

        $newData = $this->Bid_Model->fetchItems('accounts');

        if($users == $uType){

            $announce_image = $this->upload->data('file_name');
            $data = []; // new empty array
            foreach($newData as $user):
                $userIDs = $user->user_id;

                $data[] = array(
                    'title' => $title,
                    'user_type' => $users,
                    'content' => $content,
                    'image' => $announce_image,
                    'admin_user_id' => $id,
                    'user_id' => $userIDs
                ); 
            endforeach;

            $this->Bid_Model->insertItems('announcements', $data);
        }

程序启动后,我得到以下信息:

import org.jdom2.Document;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
import java.io.FileOutputStream;
import java.io.IOException;

public class ModyfyXml {

public static void main(String[] args) throws JDOMException, IOException {

    try {

        SAXBuilder sax = new SAXBuilder();
        Document doc = sax.build("F:\\c\\test.xml");

        XMLOutputter xmlOutput = new XMLOutputter();
        Format format = Format.getPrettyFormat();
        format.setEncoding("UTF-8");
        xmlOutput.setFormat(format);
        xmlOutput.output(doc, (new FileOutputStream("F:\\c\\test2.xml")));

    }catch (IOException io) {
        io.printStackTrace();
    } catch (JDOMException e) {
        e.printStackTrace();
    }
}}

某些中文字符无法正确转换

1 个答案:

答案 0 :(得分:1)

Dang,我从没注意到JDOM 2中的这个错误。

对于任何非BMP字符,您将获得相同的结果。您可以尝试使用最近几年的表情符号躁狂症,看看您得到的结果是否相同。

之所以发生,是因为自动为UTF-任何编码设置了转义策略。它所做的是相当错误的。

如果您将策略替换为不能保留XML保留字符之外的任何内容的策略,该问题将得到解决:

format.setEscapeStrategy((c) -> false);