내 설정 :XMLCh는 wchar_t를하고 그 반대의 경우도 마찬가지
- 컴파일러 : GNU GCC 나 C++ 11
- 플랫폼/OS 컴파일 4.8.2
- : 리눅스 64 비트 우분투 14.04.1 LTS
wchar_t *를 사용하여 메서드를 제공하고 XMLC *가 필요한 많은 xecerces 라이브러리 메서드에서 사용하려는 경우 하나에서 다른 것으로 변환하는 방법을 모르겠습니다. wchar_t * 대신 char *를 사용하면 쉽지만 와이드 문자를 사용해야합니다. Windows에서 나는 쉽게 하나에서 다른 캐스팅 수 있지만 내 리눅스 컴퓨터에서 작동하지 않습니다. 어떻게 든 수동으로 wchar_t *를 XMLCh로 변환해야합니다.
XMLCh *를 독점적으로 사용하는 라이브러리 libxerces-c-3.1.so를 링크합니다. XMLCh는 와이드 캐릭터를 처리 할 수 있지만, XMLChar *를 XMLCh에서 가져 오는 방법도 알지 못합니다.
이 코드는 개발되었지만 작동하지 않습니다. 포인터보다 메모리를 청소에서 쉽게 관리 할 수있는 형식 wstring 아웃 : GCC는 32 비트, UTF-32/UCS로 wchar_t
을 정의하기 때문에
static inline std::wstring XMLCh2W(const XMLCh* tagname)
{
std::wstring wstr;
XMLSize_t len1 = XMLString::stringLen(tagname);
XMLSize_t outLen = len1 * 4;
XMLByte ut8[outLen+1];
XMLSize_t charsEaten = 0;
XMLTransService::Codes failReason; //Ok | UnsupportedEncoding | InternalFailure | SupportFilesNotFound
XMLTranscoder* transcoder = XMLPlatformUtils::fgTransService->makeNewTranscoderFor("UTF-8", failReason,16*1024);
unsigned int utf8Len = transcoder->transcodeTo(tagname,len1,ut8,outLen,charsEaten,XMLTranscoder::UnRep_Throw);// XMLTranscoder::UnRep_Throw UnRep_RepChar
ut8[utf8Len] = 0;
std::wstring wstr = std::wstring((wchar_t*)ut8);//I'm not sure this is actually ok to do
return wstr;
}
중복 된 http://stackoverflow.com/questions/25782247/xerces-c-and-cross-platform-string-literals. 여기서 얻은 것보다 더 많은 대답을 얻을 수는 없을 것입니다. – Tom