PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Python + PostgreSQL + lạ ascii =lỗi mã hóa UTF8

Câu hỏi bắt đầu với một tiền đề sai:

Các ký tự ASCII nằm trong phạm vi bao gồm "\ x00" đến "\ x7F".

Câu trả lời được chấp nhận trước đây nay đã bị xóa hoạt động dưới hai sự hiểu nhầm hoàn toàn (1) mã hóa ==ngôn ngữ (2) mà mã hóa latin1 ánh xạ "\ x80" thành một ký tự Euro.

Trên thực tế, tất cả các mã hóa ISO-8859-x ánh xạ "\ x80" đến U + 0080 là một trong các ký tự điều khiển C1, không phải ký tự Euro. Chỉ 3 trong số các bảng mã đó (x in (7, 15, 16)) cung cấp ký tự Euro, là "\ xA4". Xem bài viết này trên Wikipedia .

Bạn cần biết dữ liệu của bạn đang ở dạng mã hóa nào. Nó được tạo trên máy gì? Làm sao? Ngôn ngữ mà nó được tạo (không nhất thiết là của bạn) có thể cung cấp cho bạn manh mối.

Lưu ý rằng "Dữ liệu của tôi được mã hóa bằng latin1" ở trên đó với "The cheque's in the mail" và "Tất nhiên anh sẽ yêu em vào buổi sáng". Dữ liệu của bạn có thể được mã hóa bằng một trong các mã hóa cp125x được tìm thấy trên nền tảng Windows. Lưu ý rằng tất cả chúng ngoại trừ cp1251 (Windows Cyrillic) ánh xạ "\ x80" với ký tự euro:

>>> ['\x80'.decode('cp125' + str(x), 'replace') for x in range(9)]
[u'\u20ac', u'\u0402', u'\u20ac', u'\u20ac', u'\u20ac', u'\u20ac', u'\u20ac', u'\u20ac', u'\u20ac']

Cập nhật đáp lại nhận xét của OP

Điều này hơi khó hiểu:Đầu tiên bạn nói

Nhưng sau này bạn nói

Vui lòng giải thích.

Chọn một kiểu mã hóa cp125x thích hợp:Tệp được tạo ở đâu (vị trí địa lý)? Văn bản được viết bằng (những) ngôn ngữ nào? Bất kỳ ký tự nào khác với đồng euro giả định có giá trị> "\ x7f"? Nếu vậy, những cái nào và ngữ cảnh nào chúng được sử dụng?

Cập nhật 2 Nếu bạn không "biết chương trình được viết như thế nào", cả bạn và chúng tôi đều không thể đưa ra ý kiến ​​về việc liệu chương trình có luôn sử dụng "\ x80" cho ký tự euro hay không. Mặc dù làm theo cách khác sẽ là một sự ngu ngốc hoành tráng, nhưng không thể loại trừ điều đó.

Nếu văn bản được viết bằng tiếng Anh và / hoặc nó được viết ở Hoa Kỳ và / hoặc nó được viết trên nền tảng Windows, thì có thể chắc chắn rằng cp1252 là cách để đi ... cho đến khi bạn nhận được bằng chứng ngược lại, trong trường hợp đó bạn cần phải tự mình đoán mã hóa hoặc trả lời các câu hỏi (ngôn ngữ nào, địa phương nào).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để lọc các hàng trên các giá trị lồng nhau trong một cột json?

  2. Sao chép một bản ghi, sau đó sử dụng id gia tăng tự động của nó cho các hoạt động tiếp theo

  3. Triển khai và quản lý PostgreSQL 11:Mới trong ClusterControl 1.7.1

  4. Postgresql tìm tổng dung lượng đĩa được cơ sở dữ liệu sử dụng

  5. Hiệu suất thứ tự mệnh đề WHERE và JOIN