วิดีโอและคำบรรยาย · ชุดเครื่องมือคำบรรยาย
ทำไม é ถึงกลายเป็น é ในคำบรรยาย: การเข้ารหัสข้อความ และวิธีที่เบราว์เซอร์ถอดรหัส
· มันทำงานอย่างไร
คำบรรยาย การเข้ารหัสอักขระ การประมวลผลเบราว์เซอร์
Mojibake ในคำบรรยายมักจะเข้ารหัสไม่ตรงกันเสมอไป โพสต์นี้อธิบายว่าไบต์กลายเป็นอักขระได้อย่างไร เหตุใด UTF-8 และโค้ดเพจ Windows แบบเดิมจึงไม่เห็นด้วย และวิธีที่เครื่องมือบนเบราว์เซอร์ถอดรหัสไฟล์โดยไม่ต้องส่งไปที่อื่น
สำเนียงนั้นขยะแขยง แต่จังหวะเวลาก็สมบูรณ์แบบ — ปัญหาการเข้ารหัสเกิดขึ้นได้อย่างไร
บอกได้เลยว่าทุกอย่างยกเว้นตัวละครก็โอเค การกำหนดเวลาถูกต้อง ลำดับคิวถูกต้อง โหลดไฟล์ และมีเพียงตัวอักษรเน้นเสียงเท่านั้นที่ผิด การรวมกันดังกล่าวจะขจัดข้อผิดพลาดทางโครงสร้าง เนื่องจาก parser ที่ไม่สามารถอ่านไฟล์ได้จะไม่สร้างการกำหนดเวลาที่ถูกต้อง มีอะไรผิดพลาดเกิดขึ้นก่อนที่จะแยกวิเคราะห์ เมื่อลำดับไบต์ถูกเปลี่ยนให้เป็นลำดับอักขระ
นอกจากนี้ยังอธิบายด้วยว่าเหตุใดข้อผิดพลาดจึงมักปรากฏขึ้นครึ่งทางของเวิร์กโฟลว์มากกว่าที่ต้นทาง ไฟล์ที่ดูถูกต้องในโปรแกรมแก้ไขตัวหนึ่งอาจดูผิดในไฟล์ถัดไป โดยไม่ต้องแก้ไขอะไรเลย ไม่มีอะไรแก้ไขมันได้ โปรแกรมที่สองตั้งสมมติฐานที่แตกต่างกันเกี่ยวกับความหมายของไบต์
ไบต์กับอักขระ - เหตุใดไบต์เดียวกันจึงสามารถอ่านเป็น 'é' หรือ 'é' ได้ ขึ้นอยู่กับตัวถอดรหัส
ไฟล์บนดิสก์มีหน่วยเป็นไบต์ อักขระจะมีอยู่เฉพาะเมื่อมีการใช้การเข้ารหัส ซึ่งเป็นลำดับไบต์ของการแมปตารางกับอักขระ UTF-8 แทนตัวอักษรละตินเน้นเสียง เช่น e-acute เท่ากับ 2 ไบต์ Windows-1252 แทนตัวอักษรเดียวกันกับไบต์เดี่ยว และให้ UTF-8 ไบต์ 2 ไบต์มีความหมายที่แตกต่างกันโดยสิ้นเชิง ตัวแรกคือ A ตัวพิมพ์ใหญ่ที่มีเครื่องหมายทิลเดอ และตัวที่สองคือเครื่องหมายลิขสิทธิ์
คู่ที่อ่านไม่ออกที่คุ้นเคยจึงไม่คอรัปชั่น เป็นการอ่านไบต์ที่ถูกต้องภายใต้ตารางที่ไม่ถูกต้องโดยไม่สูญเสียข้อมูล ทุกไบต์รอดชีวิต มีเพียงการตีความเท่านั้นที่เปลี่ยนไป นั่นคือสาเหตุที่ความเสียหายมักจะย้อนกลับได้ และเหตุใดจึงคุ้มค่าที่จะระบุว่าความเสียหายที่ไม่ตรงกันไปในทิศทางใด แทนที่จะแก้ไขอักขระที่มองเห็นด้วยมือ
UTF-8, Windows-1252 และเพื่อน — ไฟล์คำบรรยายการเข้ารหัสปรากฏขึ้นจริง
ไฟล์คำบรรยายจะมีการเข้ารหัสเพียงเล็กน้อย UTF-8 เป็นค่าเริ่มต้นสมัยใหม่และมี WebVTT เดียวเท่านั้นที่อนุญาต Windows-1252 เป็นเรื่องธรรมดาในไฟล์ที่สร้างโดยเครื่องมือยุโรปตะวันตกรุ่นเก่า และญาติสนิทของไฟล์ ISO-8859-1 ครอบคลุมพื้นที่เดียวกันมาก ไฟล์จากแหล่งที่มาของยุโรปกลาง ซีริลลิก หรือกรีกจะปรากฏในโค้ดเพจของ Windows ที่เกี่ยวข้อง และข้อมูลจากเอเชียตะวันออกก็เพิ่มอีกหลายไฟล์
การเข้ารหัสเหล่านี้ไม่มีการบันทึกข้อมูลประจำตัวของตนเองภายในไฟล์ ไฟล์ SRT ไม่มีการประกาศการเข้ารหัสที่ใช้ในการเขียน ซึ่งเป็นต้นตอของปัญหาทั้งหมด: ผู้อ่านต้องตัดสินใจ และไม่มีสิ่งใดที่เชื่อถือได้ในการอ่าน
เครื่องหมายลำดับไบต์ — คำใบ้ที่เป็นประโยชน์สำหรับผู้เล่นบางคนและข้อผิดพลาดที่มองเห็นได้ในผู้อื่น
เครื่องหมายลำดับไบต์เป็นข้อยกเว้นเพียงบางส่วน เป็นอักขระเฉพาะที่จุดเริ่มต้นของไฟล์ซึ่งเมื่อปรากฏจะส่งสัญญาณการเข้ารหัส มันช่วยผู้เล่นบางคนและแสดงให้คนอื่นเห็นเป็นตัวละครจรจัดก่อนดัชนีคำบรรยายแรก ซึ่งเป็นสาเหตุที่ไฟล์ที่มีไฟล์หนึ่งอาจล้มเหลวในโปรแกรมเดียวและทำงานได้ในทุกที่
parser จะดึงมันออกก่อนที่จะทำอะไรอย่างอื่น เนื่องจากเครื่องหมายที่เหลืออยู่จะยึดติดกับหมายเลขดัชนีแรกและเสียค่าคิวแรก การตรวจจับรูปแบบถูกเขียนเพื่อให้ยอมรับได้เช่นกัน ดังนั้นไฟล์ WebVTT ที่ขึ้นต้นด้วยเครื่องหมายก่อนส่วนหัวจะยังได้รับการยอมรับว่าเป็น WebVTT แทนที่จะถือว่าเป็น SRT
วิธีที่เบราว์เซอร์ถอดรหัสไฟล์ในเครื่อง — TextDecoder API และเหตุใดการตรวจจับจึงเป็นการคาดเดาเมื่อไม่มีการประกาศการเข้ารหัส
เมื่อเครื่องมือโหลดไฟล์ เครื่องมือจะเรียกใช้เมธอดข้อความ File API และวิธีการดังกล่าวจะถูกระบุให้ถอดรหัสเป็น UTF-8 ไม่มีพารามิเตอร์การเข้ารหัสและไม่มีการเจรจาต่อรอง ไฟล์ที่เป็น UTF-8 จริงๆ ถูกอ่านอย่างถูกต้อง ไฟล์ Windows-1252 ที่มีตัวอักษรเน้นเสียงแบบไบต์เดียวจะแสดงไบต์ที่ไม่สามารถเริ่มต้นลำดับ UTF-8 ที่ถูกต้องได้ และตัวถอดรหัสจะแทนที่อักขระแทนที่แทนที่จะคาดเดา
เรื่องนี้น่ารู้เพราะจะทำให้อาการเปลี่ยนไป การอ่านไฟล์ UTF-8 ด้วยตารางแบบเดิมจะทำให้เกิดความสับสนสองอักขระที่คุ้นเคย การอ่านไฟล์ดั้งเดิมเป็น UTF-8 จะสร้างอักขระทดแทนแทน ไดมอนด์สีดำหรือกล่องเปล่า การถอดรหัสเป็นสิ่งอื่นที่ไม่ใช่ UTF-8 จำเป็นต้องตั้งชื่อการเข้ารหัสอย่างชัดเจนผ่านตัวถอดรหัสเบราว์เซอร์ API และการตั้งชื่อมันเป็นส่วนที่ยาก: เมื่อไม่มีการประกาศในไฟล์ ตัวเลือกอัตโนมัติใดๆ ก็ตามจะอนุมานจากรูปแบบไบต์ ซึ่งเป็นการเดาที่โดยปกติจะถูกและผิดอย่างมั่นใจในบางครั้ง
ตัวอย่างการทำงาน: ช่วยเหลือไฟล์ Windows-1252 — ระบุการเข้ารหัสแหล่งที่มาและบันทึกอีกครั้งเป็น UTF-8 ก่อนการแปลง
หากต้องการกู้คืนไฟล์เดิม ให้ทำการแปลงก่อนที่คำบรรยายจะทำงาน แทนที่จะทำการแปลงในภายหลัง เปิดในตัวแก้ไขที่ให้คุณระบุการเข้ารหัสทั้งสองด้าน บอกให้เปิดไฟล์อีกครั้งเป็น Windows-1252 และยืนยันว่าอักขระที่เน้นเสียงปรากฏอย่างถูกต้อง If they do, the guess was right. จากนั้นบันทึกไฟล์อย่างชัดเจนเป็น UTF-8
ตรวจสอบในบรรทัดที่คุณสามารถคาดเดาได้ แทนที่จะตรวจสอบในไฟล์โดยรวม เลือกคิวที่มีสำเนียงที่คุณรู้ว่าควรจะอยู่ที่นั่น และตรวจสอบในเอาต์พุตที่แปลงแล้ว การดำเนินการนี้ก่อนหมายความว่าเครื่องมือคำบรรยายได้รับไฟล์ที่มีไบต์ตรงกับการเข้ารหัสที่จะถือว่า และขั้นตอนการแปลงก็ไม่มีอะไรผิดพลาดอีกต่อไป
สิ่งนี้ไม่ครอบคลุม — ไฟล์ที่เสียหายจากการแปลงผิดสองรอบ โดยที่ไบต์ต้นฉบับสูญหายไปแล้ว
ไฟล์ที่ผ่านการแปลงผิดสองครั้งเป็นปัญหาที่แตกต่างกัน หากไฟล์ถูกอ่านผิดและบันทึกในสถานะอ่านผิดนั้น อักขระที่ไม่ถูกต้องจะถูกเขียนออกมาเป็นอักขระจริง และไบต์ต้นฉบับจะไม่มีอยู่ในนั้นอีกต่อไป ณ จุดนั้น ไม่มีอะไรให้ตีความใหม่ เนื่องจากตอนนี้ไฟล์มีข้อความที่อ่านไม่ออกจริงๆ
กรณีเหล่านี้บางครั้งสามารถกู้คืนได้โดยการกลับลำดับการเข้ารหัสที่ผิดพลาด แต่จะเกิดขึ้นเมื่อทราบทุกขั้นตอนและไม่มีข้อมูลที่สูญหายไป ไบต์ที่กลายเป็นอักขระแทนที่จะหายไปอย่างถาวร: การแทนที่คืออักขระตัวเดียวที่แทนไบต์ที่ตัวถอดรหัสไม่สามารถใช้งานได้ และไม่ได้บันทึกว่าไบต์คืออะไร การแก้ไขที่เชื่อถือได้คือการกลับไปใช้ไฟล์ต้นฉบับ
ประเด็นสำคัญ: สร้างมาตรฐานบน UTF-8 ก่อนที่คุณจะแปลง — วิธีการทำงานของ Subtitle Toolkit กับไฟล์ของคุณในเบราว์เซอร์ และเหตุใดเอาต์พุต WebVTT จึงเป็น UTF-8 ตามคำจำกัดความ
สร้างมาตรฐานบน UTF-8 ก่อนที่จะแปลงสิ่งใดๆ ตัวไฟล์เองไม่มีคำสั่งการเข้ารหัส ดังนั้นทุกโปรแกรมที่เปิดไฟล์นั้นกำลังทำการสันนิษฐาน และวิธีหยุดสมมติฐานที่ไม่เห็นด้วยก็คือทำให้ถูกต้องทั้งหมด WebVTT ลบความคลุมเครือตามคำจำกัดความ เนื่องจากรูปแบบต้องใช้ UTF-8 ซึ่งเป็นเหตุผลในทางปฏิบัติประการหนึ่งในการแปลง SRT เป็น WebVTT สำหรับการนำส่งทางเว็บ
การแปลงจะทำงานบนไฟล์ในแท็บเบราว์เซอร์ ตรวจสอบผลลัพธ์ในบรรทัดที่คุณสามารถคาดเดาสำเนียงได้ แทนที่จะสแกนหาสิ่งที่ดูผิด เนื่องจากไฟล์ที่มีคำเน้นเสียงจำนวนหนึ่งซึ่งมีเก้าร้อยคิวนั้นง่ายต่อการเซ็นชื่อโดยไม่ต้องตรวจสอบส่วนที่จะล้มเหลว