我需要在第一行打印:

<?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/

10-12 04:33