2016-03-23 1 views
0

У меня есть база данных, сохраняющая текст с Latin1_swedish_ci. Если я извлечь данные из этой базы данных PHP (кодирование в UTF-8), я получил правильный результатPython извлекает данные из базы данных, которая закодирована Latin1_swedish_ci в MySQL

Вот результат:

measured at Dungsha coraisland (20°42’N, 116°43’E) during the South China Sea Monsoon Experiment (May-June 1998) have been calibrated and compared with radiative transfer calculations for three clear-sky days.

Однако, когда я использую питон с разъемом MySQL, Я получил неправильный результат!

Вот результат:

Downward total solar fluxes measured at Dungsha coraisland (20¢X42¡¦N, 116¢X43¡¦E) during the South China Sea Monsoon Experiment (May-June 1998) have been calibrated and compared with radiative transfer calculations for three clear-sky days.

В настоящее время часть моих кодов выглядеть следующим образом:

cnx = mysql.connector.connect(host ='localhost',user='root', database='tao',charset='utf8',use_unicode='true') 
f = io.open("upload.xml",'w',encoding='utf-8') 
f.write(row[dic['abs']]+"\n") 

Может кто-нибудь мне помочь? Мне нужно получить все данные из базы данных с помощью Python и вывести их в файл xml

Кроме того, мне интересно, почему я могу успешно получить правильный результат (20 ° 42'N, 116 ° 43'E) на эхо php? Я уже проверял данные с помощью mysql> select ..., и результат тоже такой, как 20 ¢ X42 ¡|N, 116 ¢ X43 ¡|E.

+0

Хорошо, резервное копирование в секунду. remove 'sys.setdefaultencoding (" utf8 ")'. Измените свою базу данных так, как она была, установите ваш соединитель mysql в: 'connect (host = 'localhost', user = 'root', database = 'tao', charset = 'utf-8', use_unicode = True)'. С текстом из результата DB выполните: 'io.open ('output.txt', 'w', encoding = 'utf-8'). Write (result_message)'. Теперь вставьте то, что у вас есть. –

+0

Это не сработало ... Я следую вашим методам. Поскольку система сказала мне, что я могу поместить unicode в write(), и, следовательно, я конвертирую все свои строки в unicode с помощью unicode(). Тем не менее, я проверил свой файл xml, и у меня все еще есть это, 20 ¢ X42 ¡|N, 116 ¢ X43¡|E, которого я не хотел ... –

+0

Результаты из базы данных уже должны быть Unicode. Какую кодировку вы перешли в 'unicode()'? –

ответ

1

Yikes! Я думаю, вы прошли оба набора символов latin1 и big5.
3230A2583432A1A64E шестнадцатиричный для 20¢X42¡¦N в CHARACETER SET latin1
3230A2583432A1A64E шестнадцатиричная для 20°42’N в CHARACETER SET big5
3230C2B03432E280994E шестнадцатиричная для 20°42’N в CHARACETER SET utf8, что (я думаю) является то, что вы хотели хранить.

Достаточно кошмара, чтобы иметь дело как с латинскими, так и с utf8. Но бросание big5 в микс заставляет мою голову вращаться.

подключение к MySQL готов конвертировать из любого кодирования у вас есть в то, что вы заявили, для таблицы/столбца. Но вы должны сказать это правильно.

I думаю у вас были big5 данные поступали, но вы заявили, что это latin1.

+0

Есть ли у вас какие-либо идеи, как я могу решить эту проблему ?? –

+0

Если все вернулось к нормальному и ванильному (например, я пытался заставить вас сделать это в моих комментариях выше), вы должны «ALTER» вернуться к таблице символов «big5» - ** НЕ «КОНВЕРТ» **. Затем, когда ваши данные должны быть правильно декодированы при возврате на Python. –

+0

Я не понимаю ... Вы можете сказать более конкретно? –

Смежные вопросы