【发布时间】:2013-07-16 12:09:51
【问题描述】:
由于某种原因,我无法正确地从 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:\\Users\\Admin\\Desktop\\Test.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:\\MailSend\\MailSend_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);
【问题讨论】:
-
虽然它没有回答你的问题,pugixml 声称他们有很好的 Unicode 支持。
-
TinyXML 也声称自然支持 UTF-8;你确定你正在加载的文件是 UTF-8 编码的吗?
-
是的,绝对是。
-
UTF-8 编码是否正确?有BOM吗? (二进制文件的第一个原始字节是什么)
-
好吧,我不太清楚你所说的“正确”是什么意思。我用记事本++打开了XML文件,然后单击“编码->没有BOM的UTF8”和“编码->转换为没有BOM的UTF-8”。你能告诉我在哪里可以看到第一个原始字节吗?我需要专门的编辑器吗?
标签: c++ encoding unicode tinyxml