Xerces 3.2 XMLString::代码转换无法处理特殊字符



我有这个xml文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cmh>
<value atr="éè€ç"></value> 
</cmh>

这个简单的C++程序使用Xerces 3.2.3:

...
//const XMLCh* xmlch_OptionA = currentElement->getAttribute(XMLString::transcode("atr")); --> this one always works
char* a =  "éèç€";
//char* a =  XMLString::transcode(xmlch_OptionA); --> this one does not work with these characters
cout << sizeof(char) << " " << a << std::endl;
cout << std::hex << (unsigned int)(a[0] &0xFF) << " " << (unsigned int)(a[1] &0xFF) << " " << (unsigned int)(a[2] &0xFF) << " " << (unsigned int)(a[3] &0xFF) << std::endl;
...

输出:

1 éèç€
c3 a9 c3 a8

这个程序运行得很好,但当我尝试使用XMLString:transcode从XML文件中检索char*时(请参阅注释行(,我什么也得不到,也不知道为什么。我用Iconv作为代码转换器构建了这个Xerces,难道它不应该正确处理这些情况吗?或者有没有一种方法可以在不使用转码((的情况下获得相同的结果?

错误输出:

1
0 0 0 0

NB:当然,如果我把";éç€;通过类似";abcd";。

问题来自我使用的Docker映像(gcc:10.2(。它上未安装en_US.UTF-8的区域设置。因此,我安装了它,并在程序开始时写道:

setlocale(LC_ALL, "en_US.UTF-8");

XMLString::代码转换现在工作得很好。

最新更新