[英]Xerces 3.2 XMLString::transcode not working on special characters
我有這個 xml 文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cmh>
<value atr="éè€ç"></value>
</cmh>
而這個使用 Xerces 3.2.3 的簡單 C++ 程序:
...
//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;
...
Output:
1 éèç€
c3 a9 c3 a8
這個程序工作得很好,但是當我嘗試使用 XMLString:transcode 從 XML 文件中檢索 char* 時(參見注釋行),我什么也沒得到,我不知道為什么。 我用 Iconv 作為它的轉碼器構建了這個 Xerces,它不應該正確處理這些情況嗎? 或者也許有一種方法可以在不使用 transcode() 的情況下達到相同的結果?
錯誤的 output:
1
0 0 0 0
注意:當然,如果我將“éè瀔替換為“abcd”之類的東西,它會起作用。
問題來自我使用的 Docker 圖像(gcc:10.2)。 未安裝 en_US.UTF-8 的語言環境。 所以,我安裝了它並在我的程序開頭寫道:
setlocale(LC_ALL, "en_US.UTF-8");
XMLString::transcode 現在工作得很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.