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 <[email protected]>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
> > <[email protected]> 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...@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
> > [email protected]
> > 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
[email protected]
http://mail.gnome.org/mailman/listinfo/gtkmm-list