สมมติว่าฉันกำลังแก้ไขไฟล์ด้วย vim (หรือ gvim) ฉันไม่มีความคิดเกี่ยวกับการเข้ารหัสไฟล์และฉันต้องการทราบว่าเป็น UTF-8 หรือ ISO-8859-1 หรือไม่ ฉันสามารถบอกให้ vim แสดงการเข้ารหัสที่ใช้หรือไม่
สมมติว่าฉันกำลังแก้ไขไฟล์ด้วย vim (หรือ gvim) ฉันไม่มีความคิดเกี่ยวกับการเข้ารหัสไฟล์และฉันต้องการทราบว่าเป็น UTF-8 หรือ ISO-8859-1 หรือไม่ ฉันสามารถบอกให้ vim แสดงการเข้ารหัสที่ใช้หรือไม่
คำตอบ:
การตั้งค่าการเข้ารหัสไฟล์แสดงการเข้ารหัสบัฟเฟอร์ปัจจุบัน:
:set fileencoding
fileencoding=utf8
ไม่มีวิธีทั่วไปในการพิจารณาการเข้ารหัสของไฟล์ plaintext เนื่องจากข้อมูลนั้นไม่ได้รับการบันทึกไว้ในไฟล์นั้นยกเว้นไฟล์ UTF-8 ซึ่งคุณได้รับ BOM ที่เรียกว่าการเข้ารหัส นี่คือเหตุผลที่ไฟล์ xml และ html มีเมตาแท็ก charset
คุณสามารถบังคับใช้การเข้ารหัสเฉพาะด้วยการตั้งค่า 'การเข้ารหัส' ดู:help encoding
และเป็น:help fileencoding
กลุ่มสำหรับวิธีที่เครื่องมือแก้ไขจัดการการตั้งค่าเหล่านี้ คุณยังสามารถเพิ่มการตั้งค่าการเข้ารหัสไฟล์จำนวนมากให้กับ vimrc ของคุณเพื่อให้ vim ลองตรวจจับตามค่าที่ระบุไว้
โปรดทราบว่าการเข้ารหัสไฟล์ไม่ได้ระบุไว้อย่างชัดเจนในไฟล์ ดังนั้น VIM และแอปพลิเคชั่นอื่น ๆ จะต้องเดาการเข้ารหัส วิธีการที่เป็นที่ยอมรับในการทำสิ่งนี้คือchardet
แอ็พพลิเคชันซึ่งสามารถเรียกใช้จากภายใน VIM ดังนี้:
:!chardet %
คำตอบที่จัดทำโดย jtimberman จะแสดงการเข้ารหัสบัฟเฟอร์ปัจจุบันซึ่งอาจไม่เหมือนกับการเข้ารหัสไฟล์ในดิสก์ ดังนั้นคุณจะสังเกตเห็นว่าchardet
บางครั้งจะแสดงการเข้ารหัสที่แตกต่างจาก VIM โดยเฉพาะถ้าคุณมีการกำหนดค่า VIM ให้ใช้การเข้ารหัสเฉพาะเสมอ (เช่น UTF-8)
สิ่งที่ดีเกี่ยวกับchardet
คือให้คะแนนความเชื่อมั่นในการคาดเดาในขณะที่ VIM สามารถ (และบ่อยครั้ง) ผิดเกี่ยวกับการเดาการเข้ารหัสหากมีอักขระไม่เกิน \ x7F (ASCII 127) ตัวอย่างเช่นการเพิ่มא
ไฟล์ PHP รหัสเดียวลงในไฟล์ขนาดยาวทำให้chardet
คิดว่าไฟล์นั้นISO-8859-2
มีความมั่นใจ 0.72 ในขณะที่การเพิ่มวลีที่ยาวกว่าเล็กน้อยשלום, עולם!
ให้ UTF-8 ด้วยคะแนนความมั่นใจ 0.99 ในทั้งสองกรณีset fileencoding?
แสดงUTF-8
ไม่ได้เพราะไฟล์บนดิสก์คือ UTF-8 แต่เนื่องจาก VIM ถูกกำหนดค่าให้ใช้ UTF-8 ภายใน
chardet <file>
. ยังข้อเสนอแนะที่ดี
ฉันพบว่า: https://vim.fandom.com/welo/Reloading_a_file_using_a_different_encoding
คุณสามารถโหลดไฟล์ใหม่โดยใช้การเข้ารหัสที่แตกต่างกันหาก Vim ไม่สามารถตรวจจับการเข้ารหัสที่ถูกต้อง:
:e ++enc=<encoding>
encoding
จะอยู่ที่ไหนcp850, ISO-8859-1, UTF-8, ...
คุณสามารถใช้file yourfilename
เพื่อค้นหาการเข้ารหัสหรือchardetect
(จัดทำโดยpython-chardet
หรือuchardet
ขึ้นอยู่กับการกระจาย Linux ของคุณ) ตามที่ dotancohen แนะนำ