Python печатает неправильную кодировку из базы данных MySQL - PullRequest
0 голосов
/ 22 января 2019

У меня проблемы с моим Python при вызове данных из моей базы данных MySQL.

База данных установлена ​​в формате UTF-8 и содержит специальные буквы, такие как «Æ» и «Ø».

Это код, который я использую для вызова имен пользователей из моей таблицы

# -*- coding: UTF-8 -*-
import pymysql
db = pymysql.connect(
    host="localhost",
    user="root",
    password="XXXXXXXX",
    db="pythonconnectiontest", 
    charset="utf8"
)
cursor = db.cursor()
cursor.execute("SELECT Username FROM Account")

numrows = cursor.rowcount 
for i in range (numrows):
    row = cursor.fetchone()
    print row

Ожидаемый результат:

ThisTextIsBrøken
Tæst 
Word

Фактическая выработка:

(u'ThisTextIsBr\xf8ken',)
(u'T\xe6st',)
(u'Word',)

Я получаю, что 'U' перед значением указывает, что это UNICODE, и мне, вероятно, просто нужно заставить Python правильно интерпретировать текст с помощью encode () или decode ().

Я потратил много часов, пытаясь понять это, и решение, вероятно, очень простое.

Я надеюсь, что кто-то может помочь мне исправить это.

Спасибо за чтение.

1 Ответ

0 голосов
/ 22 января 2019

Unicode-строки, которые он выводит, в порядке.Вы можете убедиться в этом, попробовав print u'ThisTextIsBr\xf8ken' в оболочке Python:

➜ python2
Python 2.7.15 (default, Jan 10 2019, 23:20:52)
[GCC 8.2.1 20181127] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print u'ThisTextIsBr\xf8ken'
ThisTextIsBrøken

Ваша путаница заключается просто в том, как python представляет строки Unicode, которые заключены в другой объект.В этом случае каждая из ваших строк представляет собой tuple столбцов или, более конкретно, кортеж, содержащий одну строку Unicode.

Вы можете убедиться в этом, настроив свой код для печати фактической строки Unicode, а не кортежа, содержащего ее.

# -*- coding: UTF-8 -*-
import pymysql
db = pymysql.connect(
    host="localhost",
    user="root",
    password="XXXXXXXX",
    db="pythonconnectiontest", 
    charset="utf8"
)
cursor = db.cursor()
cursor.execute("SELECT Username FROM Account")

numrows = cursor.rowcount 
for i in range (numrows):
    row = cursor.fetchone()
    print row[0]

Теперь выведите ожидаемые строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...