首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xerces 3.2 XMLString::transcode不处理特殊字符

Xerces 3.2 XMLString::transcode不处理特殊字符
EN

Stack Overflow用户
提问于 2022-07-21 15:15:47
回答 1查看 92关注 0票数 0

我有这个xml文件:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cmh>
<value atr="éè€ç"></value> 
</cmh>

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

代码语言:javascript
复制
...
//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;
...

输出:

代码语言:javascript
复制
1 éèç€
c3 a9 c3 a8

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

输出错误:

代码语言:javascript
复制
1
0 0 0 0

注:当然,如果我用类似于"abcd“的词来代替”éèworks“,这是可行的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-28 16:57:04

问题来自我所用的码头形象(gcc:10.2)。en_US.UTF-8的区域设置没有安装在上面。因此,我安装了它,并在我的程序开始时写道:

代码语言:javascript
复制
setlocale(LC_ALL, "en_US.UTF-8");

XMLString::transcode现在工作得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73068731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档