Tech Blog

อุบัติเหตุ Encoding ที่เกิดขึ้นระหว่างการแก้ไขข้อความเป็นชุด และการกู้คืนด้วยการสร้างใหม่ทั้งหมด

PowerShell Encoding Operations

บทนำ

เมื่อแก้ไขไฟล์ Markdown บทความบล็อกใน Astro เป็นชุดด้วย PowerShell การกำหนดค่า encoding ที่ผิดพลาดทำให้ตัวอักษรภาษาญี่ปุ่นทั้งหมดเสียหาย

นี่คือหน้าจอที่เรากำลังทำงานอยู่

หน้ารายการภาพยนตร์ (สถานะปกติ)

สิ่งที่เกิดขึ้น

  • Set-Content ของ PowerShell เขียนไฟล์เป็น UTF-16 LE โดยค่าเริ่มต้น
  • Content Collections ของ Astro คาดหวัง UTF-8
  • เป็นผลให้ตัวอักษรภาษาญี่ปุ่นทั้งหมดเสียหาย

วิธีการกู้คืน

ไฟล์ทั้งหมดได้รับการกู้คืนจาก Git commit ก่อนหน้าผ่าน checkout จากนั้นใช้ [System.IO.File]::WriteAllText ใหม่พร้อมกำหนด encoding UTF-8 อย่างชัดเจน

เราเปิดแต่ละหน้า — รายการ แนะนำ อันดับ และละเอียด — ตามลำดับ และตรวจสอบด้วยสายตาว่าข้อความภาษาญี่ปุ่นแสดงผลถูกต้อง

หน้ารายการภาพยนตร์ (สถานะปกติ)

# วิธีที่ถูกต้อง
[System.IO.File]::WriteAllText($path, $content, [System.Text.Encoding]::UTF8)

สิ่งที่เรียนรู้

ควรระบุ encoding อย่างชัดเจนเสมอเมื่อเขียนไฟล์ใน PowerShell ใช้ Set-Content -Encoding UTF8 หรือ [System.IO.File]::WriteAllText พร้อม UTF8

ส่งข้อความได้ตามสบาย

ไม่ว่าจะเป็นการว่าจ้างงาน แนะนำโปรเจกต์ ความคิดเห็น หรือคำถาม ยินดีรับทั้งหมด ผมหวังเป็นอย่างยิ่งว่าจะได้เชื่อมต่อกับผู้ที่มีอุดมการณ์อันสูงส่งเช่นเดียวกัน ผมจะมุ่งมั่นท้าทายในสิ่งที่ทุ่มเททั้งชีวิตต่อไป ขอขอบคุณและฝากเนื้อฝากตัวด้วยครับ