Encoding problems due to automatic QByteArray <-> QString casting

Andreas Pakulat apaku at gmx.de
Wed Jul 22 15:11:04 UTC 2009


On 22.07.09 16:39:08, Milian Wolff wrote:
> Milian Wolff wrote:
>> See also: https://bugs.kde.org/show_bug.cgi?id=183182
>>
>> The problem here is that QString has a ctor which converts a QByteArray 
>> implicitly to a QString. Apparently that fucks up encoding everytime. 
>> We had to fix that at like four different places, always replacing the  
>> implicit stuff with QString::fromUtf8(...).
>>
>> Now a friend of mine told me that there are:
>>
>> -DQT_NO_CAST_FROM_ASCII
>> -DQT_ASCII_CAST_WARNINGS
>> -DQT_NO_CAST_TO_ASCII
>>
>> Could/should we use those? It would show these kind of errors much earlier.
>
> Those are impractical since they (of course) also forbid the ctor for  
> simple c-char arrays which are used quite a lot (without any harm)

Pure luck that those don't contain non-ascii characters. We shouldn't
advertize this implicit conversion by having such places.

>. of  course we could use QLatinString but I doubt the huge change would
>justify the small gain. What do you think?

Is there a way of making them warnings instead of real errors? That would
at least allow to enable them now and then try to look at the warnings to
check wether we can maybe easily filter out the real problems from the
relatively unproblematic c-char array case. Fixing encoding problems
without these defines is definetly not a nice job, especially since we're
converting back and forth in a couple of places.

>> Too bad we can't mark functions/methods explicit :-/
>
> We could also supply functions which accept a QByteArray and just calls  
> the parent function with QString::fromUtf8(input)... That would be  
> failsafe... But imo a bit ugly to have that for every function...

Lets not pollute the API with "convenience" functions when the developer
needing them could've also written proper code. I know I usually also don't
use QLatin1String, but that should actually be fixed.

Andreas

-- 
You will be a winner today.  Pick a fight with a four-year-old.




More information about the KDevelop-devel mailing list