Xerces XMLString :: transcode null / empty回复

时间:2014-09-09 16:12:22

标签: locale xerces transcode

Xerces转码返回一个空字符串。我认为它与语言环境问题有关,但我被困住了。

我有这个简单的程序:

#include <xercesc/util/PlatformUtils.hpp>
#include <xercesc/util/XMLString.hpp>
#include <xercesc/dom/DOM.hpp>
#include <xercesc/util/XMLString.hpp>
#include <xercesc/framework/MemBufInputSource.hpp>
#include <xercesc/dom/DOMException.hpp>
#include <string>
#include <stdio.h>

XERCES_CPP_NAMESPACE_USE
using namespace std;

int main(int argc, char* argv[])
{
 string a = "Não";
 try
 {
   XMLPlatformUtils::Initialize("pt_PT");
 } catch(const XMLException& e)
 {
   fprintf(stdout,"ERROR INITIALIZING\n");
 }
 XMLCh *auxCh3 = XMLString::transcode(a.c_str());
 fprintf(stdout,"### %s ###\n",XMLString::transcode(auxCh3));
 XMLString::release(&auxCh3);
 XMLPlatformUtils::Terminate();
 return 0;
}

结果是:

“### ###”

如果我删除了ã,结果就可以了:

“### No ###”

服务器的语言环境定义为:

[]$ locale
LANG=pt_PT
LC_CTYPE="pt_PT"
LC_NUMERIC="pt_PT"

其中一个可用:

[]$ locale -a|grep pt_PT
pt_PT

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

当您的程序启动时,默认情况下它位于&#34; C&#34;语言环境。这由POSIX标准定义。您需要致电setlocale(LC_ALL,"")(不要忘记#include <locale.h>),根据系统环境变量设置区域设置。