คุณอาจมีปัญหาสองประการ แต่ขอถอยออกไปก่อน... เราไม่สามารถบอกได้ว่าข้อความนั้นนำเข้าไม่ถูกต้อง ส่งออกไม่ถูกต้อง หรือแสดงในลักษณะที่โง่เขลาเท่านั้น
ก่อนอื่นผมจะพูดถึง "การนำเข้า"...
อย่าพยายามแก้ไขการเข้ารหัส แทนที่จะอยู่กับการเข้ารหัส แต่ก่อนอื่น เรามาทำความเข้าใจก่อนว่าการเข้ารหัสคืออะไร อาจเป็น latin1 หรือ utf8 (หรือชุดอักขระที่มีแนวโน้มน้อยกว่าจำนวนมาก)
ค้นหาเลขฐานสิบหกของไฟล์ที่เข้ามา ใน Python โค้ดจะเป็นดังนี้สำหรับการทิ้งเลขฐานสิบหก (ฯลฯ) สำหรับสตริง u
:
for i, c in enumerate(u):
print i, '%04x' % ord(c), unicodedata.category(c),
print unicodedata.name(c)
คุณสามารถไปที่นี่เพื่อดูรายการ ค่าเลขฐานสิบหกสำหรับอักขระ latin1 ทั้งหมด พร้อมด้วยเลขฐานสิบหก utf8 ตัวอย่างเช่น ó
คือ latin1 F3
หรือ utf8 C2B3
ตอนนี้ เมื่อรู้การเข้ารหัสแล้ว บอก MySQL ได้เลย
LOAD DATA INFILE ...
...
CHARACTER SET utf8 -- or latin1
...;
ในขณะเดียวกัน มันไม่สำคัญว่า CHARACTER SET ...
ตาราง หรือ คอลัมน์ จะถูกกำหนดให้เป็นอะไร mysql จะแปลงรหัสหากจำเป็น ตัวอักษรภาษาสเปนทั้งหมดมีอยู่ใน latin1 และ utf8
ไปที่คำถามและคำตอบนี้< /em> .
ฉันแนะนำว่าคุณมีข้อผิดพลาดสองประการ ข้อหนึ่งคือกรณี "เพชรดำ" ที่กล่าวถึงในนั้น มีอย่างอื่นเป็นอย่างอื่น แต่... ปฏิบัติตาม "Best Practice" ที่กล่าวมา
กลับมาที่คำถามเรื่อง "การส่งออก"...
คุณต้องตรวจสอบเลขฐานสิบหกของไฟล์เอาต์พุตอีกครั้ง อีกครั้งมันไม่สำคัญว่าจะเป็น latin1 หรือ utf8 อย่างไรก็ตาม... หากเลขฐานสิบหกคือ C383C2B3
สำหรับเพียง ó
แสดงว่าคุณมี "การเข้ารหัสสองครั้ง" หากคุณมี ให้ตรวจสอบเพื่อดูว่าคุณได้ลบการเรียกใช้ฟังก์ชันการแปลงด้วยตนเองแล้ว และเพียงบอก MySQL ว่าอะไรคืออะไร
นี่คือutf8+Python tips เพิ่มเติมบางส่วนสำหรับคุณ อาจต้องการ
หากคุณต้องการความช่วยเหลือเพิ่มเติม ให้ทำตามข้อความทีละขั้นตอน แสดงรหัสที่ใช้ในการย้าย/แปลงในแต่ละขั้นตอน และแสดง HEX ในแต่ละขั้นตอน
person
Rick James
schedule
25.10.2016