Python Forum
Ask help for utf-8 decode/encode
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Ask help for utf-8 decode/encode
#11
Thank you for all the replies so far!

I finally figured out what problem was and how to solve it. I write this self-reply post to share my solution, and hope it be helpful to guys who have similar problem with me. 
  • problem
    The reason why python can not correctly retrieve records from mysql is because my mysql database was not properly configured for utf-8 characters, but used default latin1 encoding. (I still don't know why one of my PHP program can write and read utf-8 character to/from the problematic database without any problems, it is mysterious! Anyway...)
  • solution
    mysql config: edit my.cnf
    Quote:[mysqld]     
    datadir=/var/lib/mysql     
    socket=/var/lib/mysql/mysql.sock     
    user=mysqlold_passwords=1     
    default-character-set = utf8     
    character-set-server = utf8     
    collation-server = utf8_general_ci     
    init-connect = 'SET NAMES utf8'       
    [mysql]       
    default-character-set = utf8       
    [mysqldump]       
    default-character-set = utf8
    restart mysql: /etc/init.d/mysql restart

    To confirm the above configs works well, connect mysql: mysql -u user -p database_name
    Quote:mysql> show variables like 'char%';
    character_set_client utf8
    character_set_connection utf8
    character_set_database utf8
    character_set_filesystem binary
    character_set_results utf8
    character_set_server utf8
    character_set_system utf8
    character_sets_dir /usr/share/mysql/charsets/
    mysql> show variables like 'coll%';
    collation_connection utf8_general_ci
    collation_database utf8_general_ci
    collation_server utf8_general_ci

    Config phpmyconfig ( if necessary)
    edit config.inc.php
    Quote:$cfg['DefaultLang'] = 'utf-8';
    $cfg['DefaultConnectionCollation'] = 'utf8_general_ci';
    $cfg['FilterLanguages'] = '';
    $cfg['DefaultCharset'] = 'utf-8';
    $cfg['AllowAnywhereRecoding'] = TRUE;
    reload apache: # /etc/rc.d/init.d/apache restart

    For old database which was not correctly configured, modify it by mysqldump. Dump it
    Quote:mysqldump -u user -p database_name > database.sql 
    check database.sql, the utf-8 characters should be garbled. Dump the database again by specifying latin1 coding
    Quote:# mysqldump --default-character-set=latin1 -u root -p database_name > database.dump
    check database.dump, the garbled characters should have gone. :-)

    Then edit new dumped database.dump
    Quote:modify line 9, from
    /*!40101 SET NAMES latin1 
    to
    /*!40101 SET NAMES utf8 

    Restore the database by
    Quote:mysql -u user -p database_name < database.dump
    Restart mysql: /etc/init.d/mysql restart

  • PHP
    Add the below code right after "mysql_select_db"
    Quote:mysql_set_charset('utf8');

  • python
    Add the below code before query
    Quote:cur.execute("SET NAMES utf8")
DONE!
Reply
#12
That's like a rubik's cube procedure!
Glad you figured it out
Reply
#13
(Feb-24-2017, 11:24 AM)Larz60+ Wrote: That's like a rubik's cube procedure!
Glad you figured it out

Thank you!
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  encode/decode to show correct country letters in a CTk combobox janeik 2 711 Sep-02-2023, 09:46 AM
Last Post: janeik
Question UnicodeEncodeError: 'ascii' codec can't encode character u'\xe8' in position 562: ord ctrldan 23 4,808 Apr-24-2023, 03:40 PM
Last Post: ctrldan
  Decode string ? JohnnyCoffee 1 813 Jan-11-2023, 12:29 AM
Last Post: bowlofred
  UnicodeEncodeError: 'ascii' codec can't encode character '\xfd' in position 14: ordin Armandito 6 2,721 Apr-29-2022, 12:36 PM
Last Post: Armandito
  'NoneType' object has no attribute 'encode' bhagyashree 6 8,849 Nov-05-2020, 03:50 PM
Last Post: deanhystad
  how to encode and decode same value absolut 2 2,330 Sep-08-2020, 09:46 AM
Last Post: TomToad
  TypeError: ENCODE Method, str instead of byte Rajath 1 2,767 May-09-2020, 06:05 PM
Last Post: bowlofred
  struct.decode() and '\0' deanhystad 1 3,214 Apr-09-2020, 04:13 PM
Last Post: TomToad
  Getting decode error. shankar 8 10,338 Sep-20-2019, 10:05 AM
Last Post: tinman
  asyncio encode and decode, how good are they? CoderOne 2 2,330 Sep-03-2019, 11:06 PM
Last Post: wavic

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020