Why taglib use wstring internally? And any way to get RAW tag string?

Yanhui Shen shen.elf at gmail.com
Tue Jun 5 21:07:03 UTC 2012


Recently I'm using taglib for my player to read/write metainfo,
However I can't understand why it use wstring instead of char* or string.
I think the charset issue should be solved by upper layer.

The only thing I need is a RAW tag string,
with RAW data,  I can check whether it is encoded by utf8,
or use user's choice
or even use mozilla's algorithm for charset detecting,
then I can use iconv() or mb*()/wc*() to convert it.

But I found it was hard to do this with taglib,
Currently I already have these code to approach that goal(to get raw string)

 67 string WStringToStdString(const std::wstring& str)
>  68 {
>  69     const size_t buflen = (str.size()+1) * MB_LEN_MAX;
>  70     vector<char> buf(buflen);
>  71     size_t ret = wcstombs(&buf[0], str.c_str(), buflen);
>  72     return (ret != (size_t)-1) ? string(&buf[0], ret) : string("") ;
>  73 }
>  74
>  75 string StringToStdString(const TagLib::String& str)
>  76 {
>  77     return ( str.isLatin1() || str.isAscii() ) ?
>  78         str.to8Bit() : WStringToStdString(str.toWString());
>  79 }

StringToStdString() works fine in most cases,
but it depends on locale, and I do not want to call setlocale(LC_ALL, "").

So here is my second question, any simplest way to get RAW tag string?

Best regards,
Yanhui Shen
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/taglib-devel/attachments/20120606/46a706f6/attachment.html>

More information about the taglib-devel mailing list