การบันทึกไฟล์ในรูปแบบ CSV ใน Excel จะลบ BOM เสมอ


15

ฉันพยายามหาคำตอบ / คำอธิบายที่สมเหตุสมผล (ไม่สำเร็จ) เพื่อค้นหาว่าเหตุใด Excel จึงใช้ค่าเริ่มต้นในการลบ BOM เมื่อบันทึกไฟล์เป็นประเภท CSV

โปรดยกโทษให้ฉันหากคุณพบว่าซ้ำกับคำถามนี้ สิ่งนี้จะจัดการกับการอ่านไฟล์ CSV ด้วยการเข้ารหัสที่ไม่ใช่ ASCII แต่มันไม่ครอบคลุมการบันทึกไฟล์กลับออกมา

นี่คือสถานการณ์ปัจจุบันของฉัน (ซึ่งฉันกำลังจะรวบรวมเป็นเรื่องธรรมดาในบรรดาซอฟต์แวร์ที่แปลเป็นภาษาท้องถิ่นที่มีอักขระ Unicode และรูปแบบ CSV):

  • เราส่งออกข้อมูลไปยังรูปแบบ CSV โดยใช้ UTF-16LE เพื่อให้มั่นใจว่ามีการตั้งค่า BOM (0xFFFE) เราตรวจสอบความถูกต้องหลังจากสร้างไฟล์ด้วยตัวแก้ไข Hex เพื่อให้แน่ใจว่าได้ตั้งค่าไว้อย่างถูกต้อง

  • เปิดไฟล์ใน Excel (สำหรับตัวอย่างนี้เรากำลังส่งออกตัวอักษรญี่ปุ่น) และเป็นพยานว่า Excel จัดการโหลดไฟล์ด้วยการเข้ารหัสที่ถูกต้อง

  • ความพยายามในการบันทึกไฟล์นี้จะแสดงข้อความเตือนให้คุณทราบว่าไฟล์นั้นอาจมีฟีเจอร์ที่ไม่สามารถใช้งานร่วมกับการเข้ารหัส Unicode แต่ถามว่าคุณต้องการบันทึกหรือไม่

  • หากคุณเลือกกล่องโต้ตอบบันทึกเป็นมันจะขอให้คุณบันทึกไฟล์เป็น "ข้อความ Unicode" ทันทีแทนที่จะเป็น CSV หากคุณเลือกส่วนขยาย "CSV" และบันทึกไฟล์ไฟล์นั้นจะลบ BOM (อย่างชัดเจนพร้อมกับตัวอักษรญี่ปุ่นทั้งหมด)

ทำไมสิ่งนี้จะเกิดขึ้น มีวิธีแก้ไขปัญหานี้หรือว่าเป็น 'ข้อผิดพลาด' / ข้อ จำกัด ของ Excel หรือไม่

นอกจากนี้ (เป็นปัญหาด้านข้าง) ปรากฏว่า Excel เมื่อโหลดไฟล์ CSV ที่เข้ารหัส UTF-16LE ใช้ตัวคั่น TAB เท่านั้น อีกครั้งนี้เป็น 'ข้อผิดพลาด' / ข้อ จำกัด ของ Excel ที่รู้จักกันอีกหรือไม่

คำตอบ:


6

ไม่มีคำตอบที่สุภาพสำหรับคำถามของแบบฟอร์ม "ทำไม Excel ถึง X?"

ทำไมคุณไม่ใช้ "บันทึกเป็น Unicode Text" เป็นรูปแบบการโอนมาตรฐานของคุณ Excel Save ช่วยให้แน่ใจว่ามี BOM ใช้ TAB เป็นตัวคั่นฟิลด์คำพูดเหมือนกับ CSV ...

คุณจะไม่ "เลือกส่วนขยาย CSV" คุณมีสองตัวเลือก - รูปแบบและส่วนขยาย ลองบันทึกเป็น unicode text ในกล่อง 'Save as type' และเปลี่ยนนามสกุลในกล่อง 'ชื่อไฟล์' เป็น csv ด้วยตนเอง จากนั้นออกจาก Excel แล้วดับเบิลคลิกที่ชื่อไฟล์ใน Windows Explorer เปิดเครื่องได้ดี ลองมัน.

อัปเดตเพื่อหารือเกี่ยวกับความคิดเห็นของ OP :

  • "บันทึกเป็น Unicode Text" (ใน Excel 2007) จะบันทึกไฟล์ของคุณเป็นส่วนขยายข้อความเสมอ (ฉันไม่สามารถพูดกับรุ่นก่อนหน้าหรือรุ่นที่ใหม่กว่า) นั่นเป็นแนวคิดของ "บันทึกเป็นประเภท" ...

=> โปรดอ่านสิ่งที่ฉันเขียนไว้ด้านบนและลองด้วยตนเอง มันมักจะบันทึกไฟล์ที่มีนามสกุล TXT จนกว่าคุณจะแทนที่ว่า : ลบtxtใน 'ชื่อแฟ้ม' csvกล่องและชนิด

  • เพื่อชี้แจง "บันทึก Excel ของคุณให้แน่ใจว่ามี BOM" ไม่ถูกต้อง

=> "บันทึกเป็นUnicode text " รับรองว่ามี UTF-16LE BOM ที่ด้านหน้าของไฟล์ ลองและดู

  • นี่คือเหตุผลที่ฉันถามคำถามตั้งแต่แรก! หากฉันเปิดไฟล์ที่จัดรูปแบบ CSV ที่มี BOM เพื่อระบุว่าการเข้ารหัสไฟล์ของฉันคือ UFT-16LE และแก้ไขไฟล์นี้ผ่านทาง Excel ฉันคาดว่าเมื่อฉันบันทึกไฟล์นี้ว่าการเข้ารหัสยังคงอยู่ในชั้นเชิง ...

=> และความคาดหวังของคุณไม่ได้รับการตอบสนองเนื่องจาก Excel จะไม่เก็บข้อมูลใด ๆ เกี่ยวกับไฟล์ CSV ที่ป้อนเข้า ไม่มีทางที่จะบังคับให้ทำในสิ่งที่คุณต้องการจะทำ ดังนั้นคุณจะยอมแพ้หรือลองอย่างอื่นอย่างที่ฉันแนะนำ

  • สิ่งที่ดีจริงๆคือคนที่เคยประสบปัญหาเหล่านี้มาก่อนโปรดให้ข้อมูลเชิงลึก

=> ฉันประสบปัญหาเหล่านี้กับข้อมูลภาษาจีนและ Excel 1997 เมื่อหลายปีก่อน ฉันมีก่อนตอบคำถามของคุณตรวจสอบกับ Excel 2003 และ Excel 2007 ว่า Excel ยังทำงานไม่ดี ฉันได้ตรวจสอบแล้วว่าการแก้ปัญหา "บันทึกเป็น type = Unicode, extension = CSV" นั้นใช้งานได้จริง ฉันได้ให้ข้อมูลเชิงลึกของฉัน


1
"บันทึกเป็น Unicode Text" (ใน Excel 2007) จะบันทึกไฟล์ของคุณเป็นส่วนขยายข้อความเสมอ (ฉันไม่สามารถพูดกับรุ่นก่อนหน้าหรือรุ่นที่ใหม่กว่า) นั่นเป็นแนวคิดของ "บันทึกเป็นประเภท" ... ในการชี้แจง "บันทึก Excel ของคุณให้แน่ใจว่ามี BOM" ไม่ถูกต้อง นี่คือเหตุผลที่ฉันถามคำถามตั้งแต่แรก! หากฉันเปิดไฟล์ที่จัดรูปแบบ CSV ที่มี BOM เพื่อระบุว่าไฟล์ของฉันการเข้ารหัสเป็น UFT-16LE และแก้ไขไฟล์นี้ผ่านทาง Excel ฉันคาดหวังว่าเมื่อฉันบันทึกไฟล์นี้ว่าการเข้ารหัสยังคงอยู่ในชั้นเชิง ... ผู้ที่เคยประสบปัญหาเหล่านี้มาก่อนโปรดให้ข้อมูลเชิงลึกด้วย
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.