2011-08-21 4 views
2

가능한 중복 :
How to convert pugi::char_t* to stringpugi : 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 * 왼쪽 측면 *

감사

+0

[documentation] (http://pugixml.googlecode.com/svn/tags/latest/docs/manual/dom.html#char_t)로 이동하면 'as_wide()'를 기본으로 사용하고, 그러나 나는 또한 overload'as_wide (wchar_t *)'는 아무것도하지 않으므로 어느 컴파일러 설정이라도 사용할 수 있습니다. –

+0

as_wide() 함수를 어떻게 사용할 수 있습니까? – aliakbarian

답변

0

가 여기에 생각 whar_t입니다 때문이다.

을 우리는 이미이 두 가지 기능이 있습니다 :

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

우리는 또한 pugi::char_t는 것을 알고 중 하나 char 또는 wchar_t을 조 버전은 향후에 물건을 파괴하지만, 이제 그 시작 할 수있는 라이브러리를 수정 포함 .

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

이 모두에서 작동합니다

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

지금 당신이 쓸 수 있습니다 : 그래서 우리는 pugi::char_t에 변환 함수를 호출하기 위해 필요한 모든 당신이 당신의 헤더에 추가 할 수 있습니다 과부하이며, 컴파일러 설정으로 인해 과부하가 발생하고 pugi::char_t이 이미 char 인 경우이 작업이 완전히 최적화됩니다 (인코딩이 이미 UTF-8이며 다른 8 비트 인코딩이 아닌 경우).

(당신은 또한 pugi::string_t에 대해 같은 마법을 지원하기 위해 std::stringstd::wstring 인수를 오버로드를 제공해야합니다.)


라이브러리 오염에 대해 걱정하는 경우, 자신의 래퍼를 쓰기 :

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

이 코멘트가 보이면 나는 당신의 아이디어를 사용하고 utf8 (const char *) 함수를 사용하고 문자열을 얻는다. actully이 문자열은 페르시아어 문자열이고, 내가 utf8 textfile에 저장했던 동일한 페르시아어 단어와 비교할 때, 비교는 작동하지 않습니까? 나는 그들이 동일하지 않다는 것을 의미한다. – aliakbarian

관련 문제