Fix Encoding Artifacts
fix_mojibake · text · text
2026-09-23
กำลังประมวลผล…
fix_mojibake · text · text
2026-09-23
เมื่อไฟล์ UTF-8 ถูกเปิดด้วยโปรแกรมที่เดา encoding ผิด ข้อความไทยจะกลายเป็นตัวอักษรละตินแปลก ๆ เช่น ไทย อาการนี้เรียกว่า mojibake เทคนิคนี้ย้อนขั้นตอนที่ผิดพลาดหนึ่งชั้นเพื่อกู้ข้อความกลับ ถ้าย้อนแล้วไม่ได้ข้อความที่ถูกต้อง จะคงค่าเดิมไว้แทนที่จะทำให้เสียหายซ้ำ
Ã, à, ¸ หรือไม่ ถ้าไม่มีจะไม่แตะเลยเทคนิคนี้แก้ได้เฉพาะการอ่านผิดหนึ่งชั้น ถ้าไฟล์ผ่านการแปลงผิดซ้ำหลายรอบ ให้กลับไปหาไฟล์ต้นทางแทน
| Parameter | Type | Default |
|---|---|---|
columns | string[] | — |
import json
def repair_mojibake(value):
if not isinstance(value, str):
return value
try:
return value.encode('cp1252').decode('utf-8')
except (UnicodeEncodeError, UnicodeDecodeError):
return value
values = ['ไทย', 'ไทย', 'Bangkok', None]
print(json.dumps([repair_mojibake(v) for v in values], ensure_ascii=False))
ไฟล์ลูกค้าที่ได้จากทีมอื่นแสดงชื่อจังหวัดเป็น à¸à¸£à¸¸à¸‡à¹€à¸—พ ทั้งคอลัมน์ รัน fix_mojibake แล้วดู Preview ว่าค่าตัวอย่างกลายเป็นภาษาไทยที่อ่านออกไหม ถ้ามีบางแถวยังไม่กลับ แสดงว่าแถวนั้นผ่านการแปลงคนละแบบ ให้แยกจัดการด้วย filter_rows ก่อน
ใช้ unicode_normalize หลังกู้ข้อความเพื่อจัดรหัสให้เป็นมาตรฐาน ใช้ strip_html เมื่อข้อความยังมีแท็กปนมา และใช้ detect_null_like เพื่อจัดการค่าที่กู้ไม่ได้