我需要在第一行打印:
<?xml version = "1.0" encoding="utf-8"?>
码:
ofstream outfile("test_xml.xml");
outfile << "<?xml version = \"1.0\" encoding=\"utf-8\"?>" << endl;
outfile.close();
我得到:
?<?xml version = "1.0" encoding="utf-8"?>
行首带有问号
我也尝试写:
ofstream outfile("test_xml.xml");
outfile << "cat" << endl;
outfile.close();
我得到:
?cat
行首带有问号
哪里有问题?
最佳答案
能够在VS Community 2015上重现此问题。似乎编译器和IDE环境已经意识到了将此字符串编码为ASCII文本以外的内容的意图。
在这行上:
outfile << "<?xml version = \"1.0\" encoding=\"utf-8\"?>" << endl;
我收到警告:
经过一番搜索,找到了许多相关文章。最终,最简单的示例解决方案来自此处:
std::codecvt
技术1:
很简单的;解决您的特定问题;不提供UTF-8 BOM。
尝试对代码进行以下简单修改(遵循流行的约定,即在适用的情况下应显式地调用 namespace ):
#include <fstream>
int main()
{
std::ofstream outfile("test_xml.xml");
outfile << u8"<?xml version = \"1.0\" encoding=\"utf-8\"?>" << std::endl;
outfile.close();
return 0;
}
读取文件有其自身的复杂性,在上述相同链接中进行了介绍。
技术2:
更复杂;提供UTF-8 BOM。
请参阅此SO问题:c++ how to write/read ofstream in unicode / utf8
关于c++ - 如何在不以问号C开头的情况下在xml文件中编写,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43663009/