Fat-Zer wrote:
2016-03-26 11:42 GMT+03:00 deloptes deloptes@gmail.com:
Hi, this is also how I understand the ascii(), but do you have explanation how I then see the üöä (utf?). The above was just an experiment. For the code I wrote I solved the problem by passing the c_str() to parseVCard. This passes char array and does not care about the content that much (my understanding)
regards
Yes, It seems you are right there is a bug, haven't tried myself, but should do the trick:
diff --git a/tdeabc/vcardparser/vcardparser.cpp b/tdeabc/vcardparser/vcardparser.cpp index 7ac07ce..db33263 100644 --- a/tdeabc/vcardparser/vcardparser.cpp +++ b/tdeabc/vcardparser/vcardparser.cpp @@ -152,7 +152,7 @@ VCard::List VCardParser::parseVCards( const TQString& text ) KCodecs::quotedPrintableDecode( input, output ); } } else {
output = TQCString(value.latin1());
output = TQCString(value.utf8()); } if ( params.findIndex( "charset" ) != -1 ) { // have to
convert the data
Note that VCardParser::parseVCards() is generally encoding-unsafe...
Yes I also looked into this, I closed the file less than 60sec later - because I started having headache. I don't understand what this diff means - do you mean how it should be or is it something from the history of the file?
PS, some notes about your code:
std::string data_str(data.utf8(),data.utf8().length()); SE_LOG_DEBUG(getDisplayName(), "TDE addressbook ENTRY AFTER \n%s\n",data_str.c_str() );
Note that there is no need here to create here an intermediate std::string, next code should work by itself:
std::string data_str(data.utf8(),data.utf8().length()); SE_LOG_DEBUG(getDisplayName(), "TDE addressbook ENTRY AFTER\n%s\n",data.utf8() );
if not, just cast it to (const char *).
Thank you - you speak out some of my thoughts. I also think I have tested the above, but not sure anymore.
TDEABC::Addressee addressee = converter.parseVCard(item.c_str());
This is an equivalent to fromLatin1(), so it will work only for your locale...
I'm not sure if I understand this well. fromLatin1 means I use iso-8859, but I use utf8. It is also obvious that the input (item) is received in utf8. I had different experience when using TQString::fromLatin1 ()
Next tim if you encounter such issues, try to provide a minimal compiliable test example. That will significantly ease the testing and understanding what's wrong...
Yes, you are correct again, however time constrains and frustration prevented me doing this as I have to clean the test code from older tests, I commented out. I add now something, however I was disappointed that output of the test program was different to what I saw in the AddressBook. Perhaps because you have to convert the addressee back and this makes the original problem right somewhere in the converter.
Find attached the code and compile like this
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/trinity/lib/pkgconfig \ g++ `pkg-config --cflags tqt` -I/opt/trinity/include \ `pkg-config --libs tqt` -L/opt/trinity/lib \ -ltdecore -ltdeabc std-test.cc -o std-abreader
To check the result in the address book you have to uncomment the write and save lines and also cleanup tdeabc lock and cache files prior to executing. I had a very bad experience with those already
rm -f ~/.trinity/share/apps/tdeabc/lock/*.trinity_share_apps_tdeabc_std.vcf* \ ~/.trinity/share/apps/tdeabc/std.vcf__*
regards