簡體   English   中英

Xerces 3.2 XMLString::transcode 不適用於特殊字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM