Fat-Zer wrote:
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...
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