ฉันมีปัญหากับไฟล์คำบรรยายในวิดีโอ omxplayer เพื่อแก้ปัญหาฉันต้องแปลงจากการเข้ารหัส windows-1250 เป็น UTF-8 คำถามของฉันคือฉันจะดูไฟล์เฉพาะบางไฟล์ที่ใช้การเข้ารหัสได้อย่างไร
ฉันมีปัญหากับไฟล์คำบรรยายในวิดีโอ omxplayer เพื่อแก้ปัญหาฉันต้องแปลงจากการเข้ารหัส windows-1250 เป็น UTF-8 คำถามของฉันคือฉันจะดูไฟล์เฉพาะบางไฟล์ที่ใช้การเข้ารหัสได้อย่างไร
คำตอบ:
คุณไม่สามารถรู้ได้โดยอัตโนมัติว่าไฟล์นั้นเขียนด้วยการเข้ารหัส X แต่แรก
สิ่งที่คุณสามารถทำได้อย่างง่ายดายคือการตรวจสอบว่าไฟล์สมบูรณ์สามารถถอดรหัสได้สำเร็จอย่างใด (แต่ไม่จำเป็นต้องถูกต้อง) โดยใช้ตัวแปลงสัญญาณที่เฉพาะเจาะจง หากคุณพบไบต์ใด ๆ ที่ไม่ถูกต้องสำหรับการเข้ารหัสที่กำหนดมันจะต้องเป็นอย่างอื่น
ปัญหาคือตัวแปลงสัญญาณจำนวนมากมีความคล้ายคลึงกันและมี "รูปแบบไบต์ที่ถูกต้อง" ที่เหมือนกันเพียงแค่ตีความพวกเขาเป็นตัวละครที่แตกต่างกัน ตัวอย่างเช่นการä
เข้ารหัสแบบ in one อาจสอดคล้องกับการเข้ารหัสแบบé
อื่นหรือø
แบบที่สาม คอมพิวเตอร์ไม่สามารถตรวจจับได้ว่าวิธีใดที่จะแปลผลลัพธ์ไบต์เป็นข้อความที่มนุษย์อ่านได้อย่างถูกต้อง (เว้นแต่คุณจะเพิ่มพจนานุกรมสำหรับภาษาทุกประเภทและให้ทำการตรวจสอบการสะกดคำ ... ) คุณต้องรู้ด้วยว่าชุดอักขระบางตัวเป็นชุดย่อยของชุดอื่น ๆ เช่นการเข้ารหัส ASCII เป็นส่วนหนึ่งของตัวแปลงสัญญาณที่ใช้กันทั่วไปเช่น ANSI ตระกูลหรือ UTF-8 นั่นหมายความว่าตัวอย่างเช่นข้อความที่บันทึกเป็น UTF-8 ที่มีเฉพาะตัวอักษรละตินแบบง่ายมันจะเหมือนกับไฟล์เดียวกันที่บันทึกเป็น ASCII
อย่างไรก็ตามให้กลับมาอธิบายสิ่งที่คุณไม่สามารถทำได้กับสิ่งที่คุณทำได้จริง:
สำหรับการตรวจสอบพื้นฐานเกี่ยวกับไฟล์ข้อความ ASCII / non-ASCII (ปกติ UTF-8) คุณสามารถใช้file
คำสั่ง ไม่ทราบว่ามีตัวแปลงสัญญาณหลายตัวและตรวจสอบเพียงไม่กี่ kB แรกของไฟล์โดยสมมติว่าส่วนที่เหลือจะไม่มีอักขระใหม่ ในทางกลับกันมันยังรับรู้ประเภทไฟล์ทั่วไปอื่น ๆ เช่นสคริปต์ต่างๆเอกสาร HTML / XML และรูปแบบข้อมูลไบนารีจำนวนมาก (ซึ่งไม่น่าสนใจทั้งหมดสำหรับการเปรียบเทียบไฟล์ข้อความแม้ว่า) และอาจพิมพ์ข้อมูลเพิ่มเติมไม่ว่าจะมีเส้นยาวมากหรืออะไร ประเภทของลำดับบรรทัดใหม่ (เช่น UNIX: LF, Windows: CR + LF) ถูกนำมาใช้
$ cat ascii.txt
I am an ASCII file.
Just text and numb3rs and simple punctuation...
$ cat utf8.txt
I am a Unicode file.
Special characters like Ω€®Ŧ¥↑ıØÞöäüß¡!
$ file ascii.txt utf8.txt
ascii.txt: ASCII text
utf8.txt: UTF-8 Unicode text
หากยังไม่พอฉันสามารถเสนอสคริปต์ Python ที่ฉันเขียนให้กับคำตอบนี้ได้ที่นี่ซึ่งจะสแกนไฟล์ที่สมบูรณ์และพยายามถอดรหัสโดยใช้ชุดอักขระที่ระบุ ถ้าสำเร็จการเข้ารหัสนั้นก็คือตัวเลือกที่มีศักยภาพ มิฉะนั้นหากมีไบต์ใด ๆ ที่ไม่สามารถถอดรหัสได้คุณสามารถลบชุดอักขระนั้นออกจากรายการของคุณ
โปรแกรมที่มีชื่อfile
สามารถทำได้ ตัวอย่าง:
$ echo aaa >> FILE
$ file FILE
FILE: ASCII text, with CRLF, LF line terminators
$ echo öäü >> FILE
$ file FILE
FILE: UTF-8 Unicode text, with CRLF, LF line terminators
src/encoding.c
หากคุณกำลังสนใจในวิธีการที่จะมาดูกันทำ
file
คาดเดาและบ่อยครั้งที่มันไม่ได้ดีมาก ตัวอย่างเช่นในการทดสอบของฉันมันระบุว่า MacRoman และ CP-1252 ผิดพลาดเป็น ISO-8859 โดยมีผลลัพธ์ว่า "š" และ "ß" มีสัญญาณรบกวน
.sql
ไฟล์เก่าที่ถูกต้องและfile
แสดงให้ฉันเห็นว่ามันเป็นgzip
ไฟล์บีบอัดจริง ๆ!
piconv
เพื่อเปลี่ยนการเข้ารหัส;)