2016-03-26 11:42 GMT+03:00 deloptes <deloptes(a)gmail.com>om>:
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...
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 *).
TDEABC::Addressee addressee =
converter.parseVCard(item.c_str());
This is an equivalent to fromLatin1(), so it
will work only for your locale...
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...