Проблема
Я пытаюсь создать набор функций, который позволяет пользователю создавать XML и помещать его в XML-файл.
Проблема в том, что пользователь может самостоятельно решить, какую кодировку XML и файла.
Итак, меня интересует ситуация, когда пользователь решил создать XML-код ASCII и поместить его в файл ASCII. Проблема в том, что он может захотеть поместить некоторые символы Unicode в XML-код ASCII, а я хотел бы, чтобы символ экранировал все символы, не входящие в ASCII.
Есть ли способ сделать это без реализации собственной функции конвертера?
Я пытался ...
Я уже пробовал QDomDocument класс и все, что с ним связано. Но он преобразует только недопустимые символы XML: <,>, & ...
И если я добавлю несколько символов Unicode, они не будут исключены, несмотря на кодировку, указанную в декларации XML.
Какой-то код
Один из примеров, как я пытаюсь это сделать
QString data("version=\"1.0\" encoding=ASCII");
QDomProcessingInstruction instr = m_doc.createProcessingInstruction("xml", data);
m_doc.appendChild(instr);
QDomElement elem = m_doc.createElement(elemName.getQString());
QDomNode appendTo = m_current.isNull() ? m_doc : m_current;
appendTo.appendChild(elem);
m_current = elem;
QDomText text = m_doc.createTextNode(elemValue.getQString());
m_current.appendChild(text);
m_current = m_current.parentNode();
Также пытались сделать это с помощью современного QXmlStreamWriter
QString output;
QXmlStreamWriter stream(&output);
stream.setCodec(QTextCodec::codecForName("Windows-1250"));
stream.writeStartDocument();
stream.writeStartElement("bookmark");
stream.writeTextElement("title", "&ö");
stream.writeEndElement(); // bookmark
stream.writeEndDocument();
Ожидаемый XML:
<?xml version="1.0" encoding="ASCII"?>
<Message>
<Label>ù <> &' </Label>
<Name>&ö</Name>
<Text>Hello</Text>
</Message>
Фактический XML:
<?xml version="1.0" encoding="ASCII"?>
<Message>
<Label>ù <> &' </Label>
<Name>&ö</Name>
<Text>Hello</Text>
</Message>
PS Я также попробовал более специфическую кодировку, такую как Windows-1260, Windows-1268, но они не конвертировали их все, только ù
преобразовал в ù
, но ö
остался ö
. И даже в некоторой кодировке он вообще не конвертируется.