我认为问题出在你的终端上;您可以尝试在不同的终端中运行测试代码吗?一个已知良好的 UTF-8 支持?
终端以 UTF-8 模式输出:
$ ./a.out
Success
Schrüder
ISO-8859-15 模式下终端输出:
$ ./a.out
Success
SchrÃŒder
另外 - 请尝试并关注http://sscce.org/ 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
Edit 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>