Как предотвратить замену 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 заменять символы Юникода, отличные от BMP, ссылками на числовые символы, когда Я указываю использование кодировки UTF-8?


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

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

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

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

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

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

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