c – UTF-8和TinyXML
由于某种原因,我无法正确读取xml文件中的数据.
比如说“Schrüder”而不是“Schrüder”. 我的代码: tinyxml2::XMLDocument doc; bool open(string path) { if(doc.LoadFile(path.c_str()) == XML_SUCCESS) return true; return false; } int main() { if(open("C:UsersAdminDesktopTest.xml")) cout << "Success" << endl; XMLNode * node = doc.RootElement(); string test = node->FirstChild()->GetText(); cout << test << endl; return 0; } XML的一部分: <?xml version="1.0" encoding="UTF-8"?> <myXML> <my:TXT_UTF8Test>Schrüder</my:TXT_UTF8Test> </myXML> 请注意,如果我将其转换为ANSI并将编码类型更改为“ISO-8859-15”,它可以正常工作. 我读过像“LoadFile(filename,TIXML_ENCODING_UTF8)”这样的东西应该有帮助.然而事实并非如此(错误:无效的参数,它只是期望一个const char).我有最新版本的TinyXML2(我猜?).我在几分钟前从https://github.com/leethomason/tinyxml2下载了它. 有任何想法吗? 编辑:当我将字符串写入.xml或.txt文件时,它工作正常. eclipse ide控制台可能存在一些问题.无论如何,当我尝试通过电子邮件发送字符串时,我也遇到了同样的问题.这是MailSend脚本: bool sendMail(std::string params) { if( (int) ShellExecute(NULL,"open","H:MailSendMailSend_anhang.exe",params.c_str(),NULL,SW_HIDE) <= 32 ) return false; return true; } 我在main方法中调用它,如下所示: sendMail("-f:d.nitschmann@example.com -t:person2@example.com -s:Subject -b:Body " + test); 解决方法
我认为问题在于您的终端;你可以尝试在不同的终端上运行你的测试代码吗?一个已知良好的UTF-8支持?
使用UTF-8模式的终端输出: $./a.out Success Schrüder 在ISO-8859-15模式下使用终端输出: $./a.out Success Schr??der 另外 – 请尝试并遵循http://sscce.org/ – 为了后人的缘故,这里是您的代码,包含编译所需的一切(17676169.cpp): #include <tinyxml2.h> #include <string> #include <iostream> using namespace std; using namespace tinyxml2; tinyxml2::XMLDocument doc; bool open(string path) { if(doc.LoadFile(path.c_str()) == XML_SUCCESS) return true; return false; } int main() { if(open("Test.xml")) cout << "Success" << endl; XMLNode * node = doc.RootElement(); string test = node->FirstChildElement()->GetText(); cout << test << endl; return 0; } 编译: g++ -o 17676169 17676169.cpp -ltinyxml2 和uuencoded Test.xml – 确保使用完全相同的数据 begin 660 Test.xml M/#]X;6P@=F5R<VEO;CTB,2XP(B!E;F-O9&EN9STB551&+3@B/SX*/&UY6$U,M/@H@("`@/&UY.E185%]55$8X5&5S=#Y38VARP[QD97(+VUY.E185%]55$8X /5&5S=#X*/"]M>5A-3#X* ` end 编辑1: 如果你想证实这个理论 – 在eclipse中运行: #include <iostream> #include <string> #include <fstream> int main() { std::ifstream ifs("Test.xml"); std::string xml_data((std::istreambuf_iterator<char>(ifs)),std::istreambuf_iterator<char>()); std::cout << xml_data; } 使用UTF-8模式的终端输出: $./17676169.cat <?xml version="1.0" encoding="UTF-8"?> <myXML> <my:TXT_UTF8Test>Schrüder</my:TXT_UTF8Test> </myXML> 在ISO-8859-15模式下使用终端输出: $./17676169.cat <?xml version="1.0" encoding="UTF-8"?> <myXML> <my:TXT_UTF8Test>Schr??der</my:TXT_UTF8Test> </myXML> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |