libxml2
すべての文字列をUTF-8に格納しているようxmlChar *
です。
/**
* xmlChar:
*
* This is a basic byte in an UTF-8 encoded string.
* It's unsigned allowing to pinpoint case where char * are assigned
* to xmlChar * (possibly making serialization back impossible).
*/
typedef unsigned char xmlChar;
libxml2
Cライブラリと同様に、からstd::wstring
抜け出すためのルーチンは提供されていませんxmlChar *
。C ++ 11でaに変換する賢明な方法は、次のような方法でmbstowcs C関数を使用することであるかどうか疑問に思っています(進行中の作業)。xmlChar *
std::wstring
std::wstring xmlCharToWideString(const xmlChar *xmlString) {
if(!xmlString){abort();} //provided string was null
int charLength = xmlStrlen(xmlString); //excludes null terminator
wchar_t *wideBuffer = new wchar_t[charLength];
size_t wcharLength = mbstowcs(wideBuffer, (const char *)xmlString, charLength);
if(wcharLength == (size_t)(-1)){abort();} //mbstowcs failed
std::wstring wideString(wideBuffer, wcharLength);
delete[] wideBuffer;
return wideString;
}
編集:参考までに、私は何xmlStrlen
が返されるかをよく知っています。xmlChar
文字列を格納するために使用される数です。文字数ではなく、。の数だと思いunsigned char
ます。名前を付けていれば混乱は少なかったでしょうが、とbyteLength
の両方があるのでもっとわかりやすいと思いました。コードの正確さに関しては、wideBufferは常にバッファーを保持するために必要なサイズ以上になります(私は信じています)。切り捨てられるよりも多くのスペースを必要とする文字として(私は思います)。charLength
wcharLength
wide_t