Re: Charsets, Gtkmm and MySQL



Hello again,

I fixed the problem.

I know why I don't receive an answer about that. The solution was so
easy that it was a bit embrassing. :-)

Sorry for bothering and thanks to everyone who helped Me out.

Greetings

Bernd


Am Freitag, den 02.01.2009, 14:30 +0100 schrieb Bernd Robertz:
> Hello all,
> 
> I hope everyone is well arrived in the new year.
> 
> I come back to my last post.
> It seems to be, that I have some weired missconfiguration with my
> charsets.
> If I'm inserting a row from My gtkmm-app, it will be shown correctly in
> My app, but not in other apps like my PHP webfrontend or phpMyAdmin.
> 
> I think I know how to fix it.
> 
> Has anyone suggestions wich charset should generally be used i. e. for
> client and server apps (Gtkmm, webserver, db, etc.)?
> 
> Thanks everyone who give Me the flashlight to get the problem.
> 
> Many thanks
> 
> Bernd
> 
> 
> Am Montag, den 29.12.2008, 13:09 +0100 schrieb Bernd Robertz:
> > Hello,
> > 
> > thanks for the code.
> > 
> > result is an object of mysqlpp::StoreQueryResult in the sql-libs.
> > It stores the query data.
> > But in the docs of libmysql++ is described, that are the stored data
> > handeld as a derived std::string. Also compatible to the original
> > std::string.
> > 
> > I inserted your code as you described and it returns the following
> > output (2 textviews as example, one with shown data, one with empty)
> > The output is taken from console:
> > 
> > :::::::::::::::::: SNIP first example data :::::::::::::::::
> > 
> > ** Message: UTF-8 valid: 0: Demozugang ist der gleiche.
> > 
> > Auch f\xfcr gesch\xe4ftliche Aktivit\xe4ten (Streeting
> > Unternehmensvertrieb, siehe Unterlagen).
> > 
> > Vertriebsnummer: 00028
> > 
> > Vertriebsseite:
> > URL: http://vertrieb.streeting.com
> > Benutzer: xxxx
> > Kennwort: xxxx
> > 
> > Abrechnungssystem (im Vertriebslogin):
> > Benutzer: xxxx
> > Kennwort: xxxx
> > 
> > :::::::::::::::::: SNIP second example data :::::::::::::::::
> > 
> > ** Message: UTF-8 valid: 1: Daten CySoTec:
> > --------------
> > 
> > Jabba (XMPP) Messenger Client:
> > Benutzer: xxxx
> > Kennwort: xxxx
> > Server: cysotec.info
> > Jabba ID: xrobbi cysotec info
> > [...]
> > 
> > :::::::::::::::::: SNIP example data end :::::::::::::::::
> > 
> > As far as I can see, the one with empty data is not UTF-8 valid
> > and the other is.
> > So, what can I do, to convert the Data from the SQL server to My app in
> > a valid UTF-8, or on the other hand,
> > what collation should I use in on My SQL server?
> > 
> > Thank you alot
> > 
> > Bernd
> > 
> > 
> > Am Montag, den 29.12.2008, 00:47 +0100 schrieb Milosz Derezynski:
> > > Of what type is 'result'?
> > > 
> > > Also, could you add, before this line:
> > > 
> > >    tmp.push_back((std::string)result[row][i]);
> > > 
> > > this code:
> > > 
> > >    Glib::ustring utf8_str(result[row][i]);
> > >    g_message("UTF-8 valid: %d: %s", int(utf8_str.validate()),
> > > utf8_str.c_str());
> > > 
> > > and see what it gives?
> > > 
> > > 
> > > M.
> > > 
> > > P.S.:
> > > Yes std::string and ustring are generally compatible, with the main
> > > differences being that ustring works by-character not by-byte (e.g.
> > > find(), operator[], etc), ustring has methods for validation of UTF-8
> > > and related functionality; the main potential culprit here is
> > > operator<< and operator>> of ustring. I had really big problems with
> > > these using boost::format() until i realised that internally, it's a
> > > stream to which the args are fed using operator<<() of ustring.
> > > 
> > > 
> > > On Mon, Dec 29, 2008 at 12:01 AM, Bernd Robertz
> > > <bernd robertz cssweb de> wrote:
> > >         Thanks alot for your fast reply,
> > >         
> > >         I wrote a simple MySQL-Class wich is derived from the libsql++
> > >         class.
> > >         
> > >         In this class I used std::string to get the columns of a row.
> > >         The columns (strings) are stored in a vector<string> wich I
> > >         return to
> > >         Glib::ustring in My treeview-data-window.
> > >         
> > >         Hiere are some snippets:
> > >         
> > >         :::::::::::::::::::::::: SNIP ::::::::::::::::::::::
> > >         database.cpp
> > >         (My simple MySQL database class.)
> > >         
> > >         DataBase::Database()
> > >         {
> > >                // db-connect
> > >                // query-setup
> > >                // other connect related stuff
> > >         
> > >                mysqlpp::StoreQueryResult result; // Setup the result
> > >         object
> > >                int rows; // Keep track of result counts
> > >         }
> > >         
> > >         void DataBase::returnrow(int dataid)
> > >         {
> > >                // Setup db-query with dataid to get requested db-row
> > >                //
> > >                mysqlpp::Query query = dbcon.query(queries.alldata); //
> > >         DB Query
> > >                result = query.store(); // Store the results
> > >                rows = result.num_rows(); // Set the number of results
> > >         }
> > >         
> > >         std::vector<std::string> DataBase::fetchdata(int row)
> > >         {
> > >                std::vector<std::string> tmp; // Temp vector for return
> > >         
> > >                for (int i = 0; i < result.field_names()->size(); ++i)
> > >                {
> > >                        // Every column will be stored in the temp
> > >         vector
> > >                        tmp.push_back((std::string)result[row][i]);
> > >                }
> > >                return tmp; // Return the temp-vector with the
> > >         [columns]=data
> > >         }
> > >         
> > >         ------------
> > >         
> > >         datawindow.cpp
> > >         (The window in where the data is displayed after dbl-click on
> > >         treeview)
> > >         
> > >         DataWindow::DataWindow()
> > >         {
> > >                // Widgets setup
> > >                // Database connect via DataBase-Object
> > >         }
> > >         
> > >         void DataWindow::getid(int dataid)
> > >         {
> > >                // From the treeview I call this method to set the
> > >                // requested row-id
> > >                mysql.returnrow(dataid);
> > >         
> > >                // Call this method to setup the entries and textview
> > >                setdata();
> > >         }
> > >         
> > >         void DataWindow::setdata()
> > >         {
> > >                l_dataid.set_text(mysql.fetchdata(0)[0]);
> > >                Gtk::TreeModel::Row selrow = *(ls_cbox->prepend());
> > >                selrow[c_mod.c_cat] = mysql.fetchdata(0)[1];
> > >                cbox.set_active(0);
> > >         
> > >                // Here comes the problem, I get every column from My
> > >                // database-object wich I store in the entries.
> > >                e_name.set_text(mysql.fetchdata(0)[2]);
> > >                e_number.set_text(mysql.fetchdata(0)[3]);
> > >                e_user.set_text(mysql.fetchdata(0)[4]);
> > >                e_pass.set_text(mysql.fetchdata(0)[5]);
> > >                e_mail.set_text(mysql.fetchdata(0)[6]);
> > >                e_url.set_text(mysql.fetchdata(0)[7]);
> > >                e_other.set_text(mysql.fetchdata(0)[8]);
> > >         
> > >                // Here we have the main problem: the textview-buffer
> > >                // Some rows are shown here, some not.
> > >                b_descr->set_text(mysql.fetchdata(0)[9]);
> > >         }
> > >         
> > >         ::::::::::::::::::::::::: SNIP
> > >         END ::::::::::::::::::::::::::::
> > >         
> > >         That is the main code where the problem occours.
> > >         
> > >         The DataWindow is called on doubleclick on a treeview-row.
> > >         With the call of the DataWindow I call the DataView::getid()
> > >         wich receive the database row-id.
> > >         Then I fill with the DataView::setdata() method the widgets
> > >         in the new window.
> > >         
> > >         Some chars are, as I told, glyphs, but the textbuffer is the
> > >         main
> > >         problem.
> > >         
> > >         As far as I know, the entries and textbuffers are expecting
> > >         Glib::ustring, but I thought the conversion from std::string
> > >         to
> > >         Glib::ustring is quite compatible between these types.
> > >         I used std::string in the database class, because I wanted to
> > >         isolated
> > >         it from Gtkmm for other not Gtkmm-related projects.
> > >         
> > >         Thank you for helping.
> > >         
> > >         Bernd
> > >         
> > >         
> > >         Am Sonntag, den 28.12.2008, 22:26 +0100 schrieb Milosz
> > >         Derezynski:
> > >         
> > >         > Are you using Glib::ustring anywhere in the process of
> > >         getting the
> > >         > data from the SQL database to the view?
> > >         >
> > >         > Glib::ustring implicitly (and in my opinion still at least
> > >         not well
> > >         > enough documented/hinted at) converts from UTF-8
> > >         > to the current locale with operators << and >>. If you are
> > >         using a
> > >         > stringstream anywhere in the process, or are
> > >         > using operator<< or operator>> in any other way, this could
> > >         then be
> > >         > the cause of the problem.
> > >         >
> > >         > Otherwise, and in the above described case too actually it
> > >         would help
> > >         > very much if you could post (if possible, all of)
> > >         > the relevant code online.
> > >         >
> > >         > Regards,
> > >         > M.
> > >         >
> > >         > On Sun, Dec 28, 2008 at 8:53 PM, Bernd Robertz
> > >         > <bernd robertz cssweb de> wrote:
> > >         >         Hello list,
> > >         >
> > >         >         I'm not really sure, but I hope My question is in
> > >         the right
> > >         >         place here.
> > >         >
> > >         >         I wrote a simple database app like this:
> > >         >
> > >         >         Connect to a MySQL server via libmysql++,
> > >         >         and then list the rows in a treeview.
> > >         >         Doubleclick on a row shows a window with some
> > >         entries and a
> > >         >         textview
> > >         >         with the content of the selected row.
> > >         >         The textview is associated with a type text in the
> > >         DB.
> > >         >
> > >         >         Everything is fine.
> > >         >
> > >         >         So but I ran really into problems with the charsets.
> > >         >         german umlaute (ö, ä, etc.) and some other
> > >         characters are
> > >         >         glyphs in the
> > >         >         treeview. Ok, thats not the main problem.
> > >         >
> > >         >         That is: The entries in the detailed view still
> > >         shows the
> > >         >         glyphs for
> > >         >         some chars like ö, ä.
> > >         >         But on some rows, the represented textbuffer for
> > >         textview is
> > >         >         not
> > >         >         visible. Wich means the textview is in some rows
> > >         empty.
> > >         >
> > >         >         I run My app from a console and I got these error
> > >         messages:
> > >         >
> > >         >         :::::::::
> > >         >         Gtk-CRITICAL **: gtk_text_buffer_emit_insert:
> > >         assertion
> > >         >         `g_utf8_validate
> > >         >         (text, len, NULL)' failed
> > >         >         :::::::::
> > >         >
> > >         >         In other rows, the textbuffer is correct shown,
> > >         exepct some
> > >         >         glyphs.
> > >         >
> > >         >         If I print the textbuffer as a simple .c_str() in a
> > >         console it
> > >         >         will be
> > >         >         shown correctly (inklusive ä, ö, ü...).
> > >         >         (Tried to show the textview as a .c_str(), without
> > >         any
> > >         >         effect.)
> > >         >
> > >         >         The SQL connection is serverside-configured as UTF-8
> > >         Unicode.
> > >         >         The SQL table collation is UTF-8 General CI (Case
> > >         >         Insensitive).
> > >         >         The Application runs on a DE_de Euro (ISO-8859-15).
> > >         >
> > >         >         All characters are shown correctly in a PHP app wich
> > >         does the
> > >         >         same, just
> > >         >         only online. :-)
> > >         >
> > >         >         I hope someone could turn on a light above my head,
> > >         why I
> > >         >         don't get the
> > >         >         right charactes.
> > >         >
> > >         >         Thanks alot in advance
> > >         >
> > >         >         Bernd
> > >         >
> > >         >
> > >         >         _______________________________________________
> > >         >         gtkmm-list mailing list
> > >         >         gtkmm-list gnome org
> > >         >         http://mail.gnome.org/mailman/listinfo/gtkmm-list
> > >         >
> > >         >
> > >         >
> > >         > --
> > >         > Please note that according to the German law on data
> > >         retention,
> > >         > information on every electronic information exchange with me
> > >         is
> > >         > retained for a period of six months.
> > >         > [Bitte beachten Sie, dass dem Gesetz zur
> > >         Vorratsdatenspeicherung
> > >         > zufolge
> > >         > jeder elektronische Kontakt mit mir sechs Monate lang
> > >         gespeichert
> > >         > wird.]
> > >         
> > >         
> > > 
> > > 
> > > 
> > > -- 
> > > Please note that according to the German law on data retention,
> > > information on every electronic information exchange with me is
> > > retained for a period of six months.
> > > [Bitte beachten Sie, dass dem Gesetz zur Vorratsdatenspeicherung
> > > zufolge
> > > jeder elektronische Kontakt mit mir sechs Monate lang gespeichert
> > > wird.]
> > 
> > _______________________________________________
> > gtkmm-list mailing list
> > gtkmm-list gnome org
> > http://mail.gnome.org/mailman/listinfo/gtkmm-list
> 
> _______________________________________________
> gtkmm-list mailing list
> gtkmm-list gnome org
> http://mail.gnome.org/mailman/listinfo/gtkmm-list



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]