2011-08-21 31 views
2

可能重複:
How to convert pugi::char_t* to string如何將pugi:char_t *轉換爲字符串?

我如何轉換pugi:char_t *類型wchar_t的字符串?

我想將child_value()的結果與某個utf8字符串進行比較,如果沒有該轉換,我無法做到這一點。

for (pugi::xml_node_iterator it = words.begin(); it != words.end(); ++it) 
    { 
     wchar_t* wordValue = it->child("WORDVALUE").child_value(); 
    } 

這個任務返回錯誤,因爲右邊是pugi :: char_t *和左側是whar_t *

感謝

+0

通過[documentation](http://pugixml.googlecode.com/svn/tags/latest/docs/manual/dom.html#char_t),我會使用'as_wide()'作爲基礎,但我也會提供一個重載'as_wide(wchar_t *)'什麼也不做,所以你可以使用這個函數進行編譯器設置。 –

+0

你能告訴我如何使用as_wide()函數嗎? – aliakbarian

回答

0

這裏有一個想法。粗版本涉及到修改庫,它可以打破的東西,在未來,但讓我們開始與:

我們已經有了這兩個功能:

std::string as_utf8(const wchar_t* str); 
std::wstring as_wide(const char* str); 

我們也知道,pugi::char_t要麼charwchar_t 。因此,我們需要以呼籲pugi::char_t的轉換功能是過載,您可以添加到您的標題:

std::string as_utf8(const char* str) { return str; } 
std::wstring as_wide(const wchar_t* str) { return str; } 

現在你可以這樣寫:

pugi::char_t * mystr = get_magic_string(); 
std::string mystrU8 = as_utf8(mystr); 

這將在兩個工作編譯器設置得益於過載,並且如果pugi::char_t已經是char,那麼這將完全優化(當然假設編碼已經是UTF-8,而不是任何其他8位編碼!)。

(你也應該提供採取std::stringstd::wstring論據來支持同魔術pugi::string_t重載。)


如果擔心污染圖書館,寫自己的包裝:

std::string my_utf8(const char * str) { return str; } 
std::string my_utf8(const wchar_t * str) { return as_utf8(str); } 
+0

非常感謝。它的工作:) – aliakbarian

+0

很酷。如果您發現答案有用,請考慮接受它:-) –

+0

我不知道您是否看到此評論,我使用您的想法並使用函數as-utf8(const char *)並獲取字符串。實際上這個字符串是一些波斯字符串,當我將它與我保存在utf8文本文件中的同一個波斯字進行比較時,該比較不起作用?我的意思是他們不一樣 – aliakbarian