我有一个 c++ 程序,它从服务器接收一些 xml,然后尝试解析它以填充一些组合框,例如
<?xml version="1.0"?>
<CustomersMachines>
<Customer name="bob" id="1">
<Machine name="office1" id="1" />
<Machine name="officeserver" id="2" />
</Customer>
</CustomersMachines>
对于这些值,TinyXML 可以很好地解析,并且生成的组合框会按预期填充。当多字节字符放置在名称元素的末尾(或靠近,取决于多少字节)时,就会出现问题。
<Customer name="boß" id="3">
将导致组合框被填充值boß" id=
通过调试器,我看到当多字节字符传递给 ReadText() 时,元素中的以下 1-3 个单字节字符会被跳过但会自动包含在内,因此 tinyXML 不会注册结束引号并保留解析直到到达下一个。在发送 xml 的服务器上运行的应用程序主要使用 ISO-8859-1 编码,而 tinyXML 默认为 UTF-8。
我尝试将 tinyxml 调整为默认使用 TIXML_ENCODING_UNKNOWN,这似乎可以解决问题,但会在程序的其他地方引起大量问题。我尝试过的其他事情是在发送之前对 xml 服务器端进行 utf8_encode(但这会导致奇怪的字符显示在应该是多字节字符的组合框中),并强制编码到发送到的 xml客户端程序无济于事。
在这种情况下,任何人都知道如何防止多字节字符自动忽略以下 1-3 个字符?