Tôi gặp sự cố với việc mã hóa biến đường dẫn và chèn nó vào cơ sở dữ liệu SQLite . Tôi đã cố gắng giải quyết nó bằng hàm encode ("utf-8") nhưng không giúp được gì. Sau đó, tôi sử dụng hàm unicode () cho tôi loại unicode .
print type(path) # <type 'unicode'>
path = path.replace("one", "two") # <type 'str'>
path = path.encode("utf-8") # <type 'str'> strange
path = unicode(path) # <type 'unicode'>
Cuối cùng, tôi đã đạt được loại unicode , nhưng tôi vẫn gặp lỗi tương tự khi loại biến đường dẫn là str
sqlite3.ProgrammingError: Bạn không được sử dụng bytestrings 8 bit trừ khi bạn sử dụng text_factory có thể giải thích bytestrings 8 bit (như text_factory = str). Bạn rất nên chuyển ứng dụng của mình sang chuỗi Unicode.
Bạn có thể giúp tôi giải quyết lỗi này và giải thích cách sử dụng chính xác của encode("utf-8")
và các unicode()
chức năng? Tôi thường chiến đấu với nó.
BIÊN TẬP:
Câu lệnh execute () này đã gây ra lỗi:
cur.execute("update docs set path = :fullFilePath where path = :path", locals())
Tôi đã quên thay đổi mã hóa của biến fullFilePath gặp phải vấn đề tương tự, nhưng tôi đang khá bối rối. Tôi có nên chỉ sử dụng unicode () hoặc encode ("utf-8") hay cả hai không?
Tôi không thể sử dụng
fullFilePath = unicode(fullFilePath.encode("utf-8"))
vì nó làm phát sinh lỗi này:
UnicodeDecodeError: codec 'ascii' không thể giải mã byte 0xc5 ở vị trí 32: thứ tự không trong phạm vi (128)
Phiên bản Python là 2.7.2