У меня проблема с попыткой разобраться с использованием UTF8 с Poco::XML::XMLWriter
.В следующем примере кода все работает нормально, когда ввод содержит символы ASCII.Однако иногда строка в wordmapIt->first
содержит не-ASCII-значение, такое как символ -105, встречающийся в середине строки.Когда это происходит, кажется, что поток xml заканчивается на символе -105, хотя после этого есть много других слов.Я хочу сохранить любую строку, которая была там, так что простое удаление символа не является правильным ответом - должна быть какая-то кодировка, которую я могу применить (я думаю), но что?
Я явно скучаючто-то концептуально, но для жизни я не могу найти правильный способ сделать это.
Poco::XML::XMLString EDocument::makeXMLString()
{
std::stringstream xmlstream;
Poco::UTF8Encoding utf8encoding;
Poco::XML::XMLWriter writer(xmlstream, 0, "UTF-8", &utf8encoding);
writer.startDocument();
std::map<std::string, std::string>::iterator wordmapIt;
for ( wordmapIt = nodeinfo->wordmap.begin(); wordmapIt != nodeinfo->wordmap.end(); wordmapIt++ )
{
writer.startElement("", "", "word");
writer.characters(Poco::XML::toXMLString(wordmapIt->first));
writer.endElement("", "", "word");
}
writer.endDocument();
return xmlstream.str();
}
Редактировать: Решение на основе ответа ниже.
Poco::XML::XMLString EDocument::makeXMLString()
{
std::stringstream xmlstream;
Poco::UTF8Encoding utf8encoding;
Poco::XML::XMLWriter writer(xmlstream, 0, "UTF-8", &utf8encoding);
Poco::Windows1252Encoding windows1252encoding;
Poco::UTF8Encoding utf8encoding;
Poco::TextConverter textconverter(windows1252encoding, utf8encoding);
writer.startDocument();
std::map<std::string, std::string>::iterator wordmapIt;
for ( wordmapIt = nodeinfo->wordmap.begin(); wordmapIt != nodeinfo->wordmap.end(); wordmapIt++ )
{
std::string strword;
textconverter.convert(wordmapIt->first, strword);
writer.startElement("", "", "word");
writer.characters(strword);
writer.endElement("", "", "word");
}
writer.endDocument();
return xmlstream.str();
}