【问题标题】:Writing emoji to XML file in JAVA在 JAVA 中将表情符号写入 XML 文件
【发布时间】:2020-04-23 19:02:39
【问题描述】:

小问题:给定String str = "????"; 输出一个包含<tag>????</tag> 而不是<tag>😭</tag> 的XML 文件

我正在尝试在 JAVA 中创建一个 XML 文件,该文件可能在标签中包含普通文本或表情符号。 XML 文件采用 UTF-8 编码,因此在 Notepad++ 中打开时,您可以在标签中看到普通文本和表情符号。在测试我的代码时,不知何故,表情符号被翻译为 xxxxx;。

示例代码:

String str = "????";
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
Element root = document.createElement("tag");
root.appendChild(document.createTextNode(str));
document.appendChild(root);
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.transform(new DOMSource(document), new StreamResult(new File("test.xml")));

【问题讨论】:

标签: java xml unicode emoji


【解决方案1】:

默认情况下,表情符号将被翻译成它们的 HTML 代码,但您可以通过嵌入指令来禁用输出转义来防止这种情况。这是一个使用您的代码的示例,只需额外两行即可禁用转义,然后启用转义,calling the Document method createProcessingInstruction()

package com.unthreading.emojitoxml;

import java.io.File;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.OutputKeys;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;

public class App {

    public static void main(String[] args) throws ParserConfigurationException, TransformerException {

        String str = "?";
        Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
        Element root = document.createElement("tag");
        document.appendChild(document.createProcessingInstruction(StreamResult.PI_DISABLE_OUTPUT_ESCAPING, "")); // <=== ADD THIS LINE
        root.appendChild(document.createTextNode(str));
        document.appendChild(root);
        document.appendChild(document.createProcessingInstruction(StreamResult.PI_ENABLE_OUTPUT_ESCAPING, "")); // <=== ADD THIS LINE
        Transformer transformer = TransformerFactory.newInstance().newTransformer();
        transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
        transformer.transform(new DOMSource(document), new StreamResult(new File("test.xml")));
    }
}

这是运行该代码后 test.xml 的内容:

<?xml version="1.0" encoding="UTF-8" standalone="no"?><tag>?</tag>

注意事项:

【讨论】:

    猜你喜欢
    • 2013-07-06
    • 2018-05-02
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多