الخلية في بيثون ترميز
-
27-10-2019 - |
سؤال
هذا المنصب هو نفسه مع سؤالي في الخلية في بايثون:UnicodeEncodeError:'ascii' هذا فقط لتوضيح الأمور.
أنا أحاول إنقاذ سلسلة إلى قاعدة بيانات MySQL ولكن تظهر لي رسالة خطأ:
ملف ".smart.py" الخط 51 ، (رقم النص ، 'الذكية', 'u')
UnicodeDecodeError:'ascii' لا يمكن فك ترميز بايت 0xc2 في موقف 25:ترتيبي في مجموعة(128)
و السلسلة يتم حفظها في م['Text']
لالا*=#&%@<>_?!:;-'"/()¥¡¿
هنا مقتطف الشفرة
risk = m['Text']
msg = risk.encode('utf8')
text = db.escape_string(msg)
sql = "INSERT INTO posts(nmbr, \
msg, tel, sts) \
VALUES ('%s', '%s', '%s', '%s')" % \
(number, text, 'smart', 'u')
إذا حاولت التعليق الخروج استعلام SQL ووضع طباعة النص فإنه طباعة لالا*=#&%@<>_?!:;-'"/()¥¡¿
الخطأ هو فقط عندما واجه SQL قيد المعالجة.
الخلية ترميز مجموعة utf8_unicode_ci.(أو يجب تغيير هذا؟)
شكرا
المحلول
إضافة هذه المعلمات MySQLdb.connect(..., use_unicode=1,charset="utf8")
.
إنشاء المؤشر
cur = db.cursor()
ومن ثم تنفيذ مثل ذلك:
risk = m['Text']
sql = """INSERT INTO posts(nmbr, msg, tel, sts) \
VALUES (%s, %s, %s, %s)"""
values = (number, risk, 'smart', 'u')
cur.execute(sql,values) #use comma to separate sql and values, this will ensure values are escaped/sanitized
cur.commit()
الآن أنت لا تحتاج هذه خطين:
msg = risk.encode('utf8')
text = db.escape_string(msg)
نصائح أخرى
فإنه ليس من الواضح ما إذا كان الخاص بك m['Text']
قيمة من نوع StringType
أو UnicodeType
.أراهن أنه بايت-سلسلة (StringType
).إذا كان هذا صحيحا ، ثم إضافة خط m['Text'] = m['Text'].decode('UTF-8')
قبل إدراج الخاص بك قد تعمل.