You're right about FileRef taking only const char *, and yes QStringToTString doesn't help. But in addition, the function doesn't work. I don't know if it's with the new qt libraries (I'm using 4.5.2). I took a look at the macro definition for the function and it looks outdated. viz.<br>
<br>#define QStringToTString(s) TagLib::String(s.utf8().data(), TagLib::String::UTF8)<br><br>QString no longer has a utf8() function.<br><br>But there is one thing I took away from this function that seems to work in addition to toAscii() and that's toUtf8().data().<br>
<br>For some reason toUtf8().constData() doesn't work, but toUtf8().data() works.<br><br>i.e.<br><br>TagLib::FileRef tagFile(qstr.toUtf8().data());<br><br>Would this be a more preferable way to do it than toAscii()?<br>
<br>Thanks,<br>Plasty.<br><br>PS: I also noticed that both Qt and taglib support utf16, but I tried it and it didn't work and also I don't know much about UTF.<br><br><br><div class="gmail_quote">2009/12/6 Lukáš Lalinský <span dir="ltr"><<a href="mailto:lalinsky@gmail.com">lalinsky@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="im">On Sat, Dec 5, 2009 at 10:29 PM, Michael Pyne <<a href="mailto:mpyne@purinchu.net">mpyne@purinchu.net</a>> wrote:<br>
> On Saturday 05 December 2009 15:25:13 Plasty Grove wrote:<br>
>> That makes sense, but even the following doesn't work:<br>
>><br>
>> QString qstr = "/home/mydir/music/song.mp3";<br>
>> QByteArray qbArray = qstr.toLocal8Bit();<br>
>> const char* str = qbArray.constData();<br>
>> TagLib::FileRef tagFile(str);<br>
>><br>
>> In this case, I've got a local object which stores the value returned by<br>
>> toLocal8Bit() and which is in scope when I'm using str. Does qbArray get<br>
>> destroyed whenever constData() is called on it? When I'm debugging, I can<br>
>> still see str holding a value when it goes to the next step.<br>
><br>
> Perhaps an encoding issue if you don't use straight US-ASCII for your file<br>
> names? In that case if "local8Bit" is not the encoding Taglib is expecting<br>
> you'll get weirdness.<br>
><br>
> The KDE JuK music manager uses taglib and has TString/QString conversion code<br>
> (and I'm sure Amarok has the same thing) if you want to see how those projects<br>
> do it.<br>
<br>
</div>TagLib::String will not help in this case, because it also represents<br>
Unicode string, like QString. FileRef's filename parameter on<br>
non-Windows platforms is char*, so you need the actual encoded bytes.<br>
In Qt you can use QFile::encodeName(string) to encode the filename the<br>
same way Qt does it for file dialogs or other places that interact<br>
with the filesystem. This can still fail in some cases (different<br>
mounted filesystems using different encodings), but it's the best you<br>
can do if you store filenames as Unicode strings.<br>
<font color="#888888"><br>
--<br>
Lukas Lalinsky<br>
<a href="mailto:lalinsky@gmail.com">lalinsky@gmail.com</a><br>
</font><div><div></div><div class="h5">_______________________________________________<br>
taglib-devel mailing list<br>
<a href="mailto:taglib-devel@kde.org">taglib-devel@kde.org</a><br>
<a href="https://mail.kde.org/mailman/listinfo/taglib-devel" target="_blank">https://mail.kde.org/mailman/listinfo/taglib-devel</a><br>
</div></div></blockquote></div><br>