Подавить javax.xml.transform.Transformer заменяет символы Unicode, отличные от BMP, на числовую ссылку на символ в кодирJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Подавить javax.xml.transform.Transformer заменяет символы Unicode, отличные от BMP, на числовую ссылку на символ в кодир

Сообщение Anonymous »

Справочная информация
Я хочу написать XML-файл, содержащий символы, отличные от BMP, в кодировке UTF-8.
ПроблемаС помощью следующего кода сгенерированный XML-файл заменяет символы Unicode, отличные от BMP, цифровыми ссылками на символы.

Код: Выделить всё

package xml;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class XMLClass {

static String names[] = {"𠀋一郎", "𠮷野","辻󠄀","👨‍👩‍👦"};

public static void main(String[] args) {

DocumentBuilder documentBuilder = null;
try {
documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
Document document = documentBuilder.newDocument();
document.setXmlStandalone(true);

Element list = document.createElement("list");
document.appendChild(list);
for (int i = 0; i < names.length; i++) {
Element name = (Element) document.createElement("name").cloneNode(false);
list.appendChild(name);
name.appendChild(document.createTextNode(names[i]));
}

File file = new File("NameList.xml");
write(file, document);
}

public static boolean write(File file, Document document) {

Transformer transformer = null;
try {
TransformerFactory transformerFactory = TransformerFactory.newInstance();
transformer = transformerFactory.newTransformer();
} catch (TransformerConfigurationException e) {
e.printStackTrace();
return false;
}

transformer.setOutputProperty("indent", "yes");
// non-BMP characters written in characters (no numeric character reference style)
// when you set encoding UTF-16
transformer.setOutputProperty("encoding", "UTF-8");
transformer.setOutputProperty("{http://xml.apache.org/xalan}indent-amount", "2");

try {
transformer.transform(new DOMSource(document), new StreamResult(
file));
} catch (TransformerException e) {
e.printStackTrace();
return false;
}

return true;
}
}
Я ожидал:

Код: Выделить всё

𠀋一郎
𠮷野
辻󠄀
👨‍👩‍👦

Но вот что я получил:

Код: Выделить всё

𠀋一郎
𠮷野
辻󠄀
👨‍👩‍👦

Вопрос
Как я могу подавить javax.xml.transform.Transformer заменяет символы Unicode, отличные от BMP, числовой ссылкой на символ, когда я указываю использование UTF -8 кодировка?


Подробнее здесь: https://stackoverflow.com/questions/791 ... racters-to
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»