PugiXML C++ 换行符处理问题:'\n\n' 变为 '\\n\\n'

PugiXML C++ Newline handling issue: '\n\n' becomes '\\n\\n'

最近我一直在为我正在开发的游戏(使用 Cocos2d-X)的本地化系统使用 XML 文件。我正在使用 PugiXML 来解析 XML 本地化文件。在解析其中包含换行符 (\n) 的英文字符串时,我遇到了 运行 问题。更准确地说,在 XML 文件中:

问题是 PugiXML 将这些 \n\n 个字符解析为 \n\n。这是它在调试器上的样子:

请注意,系统尝试翻译的字符串是

englishstring (englishstring std::__1::string "(We?[lcom]*e)(to|Regex).+\n\n(tap to continue)")

pugixml 返回的字符串是

engString(engString std::__1::string "(We?[lcom]*e)(to|Regex).+\n\n(tap to continue)")

显然比较这两个字符串失败了,所以没有翻译。另外,Cocos2d-X 不会用 \n 绘制换行符,因此将所有换行符设置为该换行符也不是一个选项。

我知道这可能是期望的行为,但我的问题是:我如何才能 fix/disable 这种行为?我已将 XML 解析模式设置为 pugi::parse_minimal 但它仍然是 returns \n 个字符。

在 c++ 中,字符串中的反斜杠必须用另一个反斜杠转义。因此,如果文本包含 \,它将在字符串中显示为 "\",即使它只包含一个反斜杠。

反斜杠后面的字符不会改变这一点。 \n 中的 xml 只是两个字符,其中一个是反斜杠。所以 \n 变成 "\n"

您似乎希望在 xml 中换行。在这种情况下,您必须使用 xml 实体 
 来表示换行符。所以而不是

<string16 englishstring="(We?[lcom]*e)(to|Regex).+\n\n(tap to continue)">

改用这个

<string16 englishstring="(We?[lcom]*e)(to|Regex).+&#10;&#10;(tap to continue)">

或者您可以在 xml 中逐字换行。看起来像这样:

<string16 englishstring="(We?[lcom]*e)(to|Regex).+

(tap to continue)">

但并非所有 xml 解析器都支持,我不知道 PugiXML。