မူရင်းစာသားမပျောက်ပျက်စေဘဲ SRT စာတန်းထိုး Encoding ပြဿနာကို ဖြေရှင်းနည်း
စာလုံးပေါင်းမှားယွင်းနေသော SRT ဖိုင်များကို စစ်ဆေးဖော်ထုတ်ပြီး Decoding အမှားများနှင့် ပျောက်ဆုံးစာလုံးများကို ခွဲခြားကာ Python ကိရိယာဖြင့် လုံခြုံစိတ်ချရသော UTF-8 မိတ္တူသီးသန့် ပြုလုပ်နည်း။

BookTranslator Team

သင်၏ SRT စာတန်းထိုးများတွင် café အစား caféဟု ပေါ်နေပါက ဖိုင်ကို UTF-8 အဖြစ် ချက်ချင်း save မလုပ်ပါနှင့်။ ဦးစွာ မူရင်းဖိုင်၏ byte များကို မထိမခိုက်စေဘဲ မိတ္တူတစ်ခု သိမ်းဆည်းပါ၊ မှန်ကန်သော စာလုံးများထွက်ပေါ်စေမည့် decoding ကို ရှာဖွေဖော်ထုတ်ပါ၊ ထို့နောက် စိစစ်ပြီးသား စာသားကို သီးခြားဖိုင်အသစ်တစ်ခုထဲသို့ ရေးသားသိမ်းဆည်းပါ။ အမှားပါနေသော စာလုံးများကို encoding အသစ်ဖြင့် သိမ်းဆည်းလိုက်ပါက အမှားများသာ ဆက်လက်ကျန်ရှိနေမည် ဖြစ်သည်။
အဓိက ကွဲပြားချက်မှာ မှန်ကန်သော encoding ဖြစ်ခြင်းနှင့် စာသားအမှန်ထွက်ခြင်း မတူညီမှုဖြစ်သည်။ အောက်ဖော်ပြပါ cue နှစ်ခုပါ မူရင်းစမ်းသပ်မှုတွင် ပျက်စီးနေသော ဖိုင်တစ်ခုသည် တင်းကျပ်သော UTF-8 စစ်ဆေးမှုကို အောင်မြင်ပြီး အစားထိုးသင်္ကေတများ မပါဝင်သော်လည်း ၎င်း၏ ပြင်သစ်စာသားမှာ မှားယွင်းနေဆဲဖြစ်သည်။ အခြားဖိုင်တစ်ခုမှာ မူရင်းအက္ခရာ ခြောက်လုံးကို �.
ဤလမ်းညွှန်တွင် စက်တွင်းသုံး Python စစ်ဆေးခြင်းနှင့် ပြောင်းလဲခြင်း ကိရိယာ၊ ဒေါင်းလုဒ်လုပ်နိုင်သော မူရင်းဖိုင်များနှင့် ပြန်လည်စမ်းသပ်နိုင်သော စမ်းသပ်မှုတစ်ခု ပါဝင်သည်။ ၎င်းသည် ဖိုင်အဆင့် စစ်ဆေးခြင်းနှင့် တိကျသော ဖော်မတ်ပြောင်းလဲခြင်းကိုသာ လုပ်ဆောင်ပေးပြီး အလိုအလျောက် encoding ရှာဖွေခြင်း၊ ဗီဒီယိုအသံနှင့် စာသားချိန်ညှိခြင်း သို့မဟုတ် ပျောက်ဆုံးသွားသော စာလုံးများကို ပြန်လည်ရယူပေးနိုင်မည်ဟု အာမခံခြင်း မဟုတ်ပါ။
ပထမဦးစွာ မည်သည့်အရာ အမှန်တကယ် ပျက်စီးနေသည်ကို ရှာဖွေပါ
ဖိုင်တစ်ခု၏ .srt extension သည် စာတန်းထိုး ဖော်မတ်တစ်ခုဖြစ်ကြောင်းကိုသာ ဖော်ပြပြီး သီးသန့် encoding စနစ်တစ်ခုကို အာမမခံပါ။ SRT သည် cue နံပါတ်များ၊ အချိန်မှတ်များ၊ စာသားများနှင့် ခြားနားချက်များကိုသာ ထိန်းသိမ်းပေးထားပြီး Library of Congress ၏ SRT ဖော်မတ် မှတ်တမ်း အရ ၎င်းကို သတ်မှတ်ထားသော character-encoding စံနှုန်းမရှိသည့် ရိုးရိုးစာသားအဖြစ် ဖော်ပြထားသည်။
မြင်တွေ့ရသော လက္ခဏာကို အကြောင်းရင်းအဖြစ် မသတ်မှတ်ဘဲ စုံစမ်းစစ်ဆေးရန် အချက်အဖြစ်သာ အသုံးပြုပါ -
| သင်မြင်တွေ့ရသည့် အခြေအနေ | စစ်ဆေးရမည့် အချက် | ဆက်လက်ဆောင်ရွက်ရန် သင့်လျော်သော အဆင့် |
|---|---|---|
| အက်ပ်တစ်ခုတွင် ဖိသံအမှတ်အသားများ သို့မဟုတ် သင်္ကေတများ မှားယွင်းနေခြင်း | မထိမခိုက်ရသေးသော ဖိုင်ကို မူလ source encoding ဖြင့် ပြန်ဖွင့်ပါက စာသားမှန်ကန်စွာ ထွက်ပေါ်လာပါသလား။ | မှန်ကန်ပါက မိတ္တူအသစ် မထုတ်ယူမီ ထိုသီးသန့် decoding ကို အသုံးပြုပါ။ |
café ကို UTF-8 အဖြစ် မှန်ကန်စွာ ဖတ်ရှုထားသော ဖိုင်တွင် တွေ့နေရဆဲဖြစ်ခြင်း | UTF-8 ကို ယခင်က အခြား encoding အနေဖြင့် မှားယွင်းဖတ်ရှုပြီး သိမ်းဆည်းခဲ့ဖူးပါသလား။ | မူရင်း bytes များဆီသို့ ပြန်သွားပါ၊ သို့မဟုတ် ပြောင်းလဲခဲ့သည့် သမိုင်းကြောင်းအတိအကျကို စစ်ဆေးပါ။ UTF-8 ဖြင့် နောက်ထပ်တစ်ကြိမ် ပြန်သိမ်းခြင်းသည် ပြဿနာကို ဖြေရှင်းပေးမည်မဟုတ်ပါ။ |
� စာလုံး သို့မဟုတ် သင်္ကေတရှိရမည့်နေရာတွင် ပေါ်နေခြင်း | U+FFFD ကို ဖိုင်ထဲတွင် အမှန်တကယ် သိမ်းဆည်းထားခြင်းလား၊ သို့မဟုတ် decode မလုပ်နိုင်သော bytes များကို ပြသနေစဉ် လက်ရှိ app က အစားထိုးပြသနေခြင်းလား။ | မပြုပြင်ရသေးသော မူရင်းဖိုင်ကို စစ်ဆေးပါ။ သိမ်းဆည်းထားပြီးဖြစ်သော အစားထိုးစာလုံးသည် မူရင်းစာလုံး မည်သည့်အရာဖြစ်သည်ကို ဖော်ပြပေးနိုင်မည်မဟုတ်ပါ။ |
| Player ထဲတွင် လေးထောင့်ကွက်များ ပေါ်နေသော်လည်း စိတ်ချရသော text view တွင် မူလရည်ရွယ်ထားသည့် စာလုံးများအတိုင်း ပေါ်နေခြင်း | အောက်ခံ code points များ မှန်ကန်ပါသလား။ Player သည် အဆိုပါဖိုင်ကိုပင် ဖွင့်နေခြင်း ဟုတ်ပါသလား။ | ဖိုင်ကို မပြင်ဆင်မီ player ၏ decoding၊ font ပံ့ပိုးမှု သို့မဟုတ် rendering ဆက်တင်များကို စစ်ဆေးပါ။ |
စာလုံးများနှင့် ၎င်းတို့ကို ဖော်ပြသည့် ရုပ်ထွက်ပုံသဏ္ဌာန်များသည် မတူညီသောအရာများ ဖြစ်ကြသည်။ Python ၏ Unicode ရှင်းလင်းချက် တွင် code points များနှင့် font ဖြင့် ရေးဆွဲပြသသော glyphs များကို ခွဲခြားထားသည်။ Text editor တွင် စာသားမှန်ကန်နေခြင်းသည် ပြဿနာမှာ player ဘက်တွင် ရှိနိုင်ကြောင်း ညွှန်ပြနေသော်လည်း သီးခြား font တစ်ခုကို ထည့်သွင်းလိုက်ရုံဖြင့် အဆင်ပြေသွားမည်ဟု အာမမခံနိုင်ပါ။ ဤဆောင်းပါးအတွက် မည်သည့် font သို့မဟုတ် player ကိုမျှ စမ်းသပ်ထားခြင်း မရှိပါ။
Bytes များကို backup ပြုလုပ်ပြီး decoding ကို စစ်ဆေးပါ
ဒေါင်းလုဒ်လုပ်ပါ subtitle_encoding.py ပြီးနောက် သင်စစ်ဆေးလိုသော SRT ဖိုင်ဘေးတွင် ထားပါ။ ဤ command များသည် စက်ထဲတွင် Python 3 ရှိပြီးသားဖြစ်ရန် လိုအပ်ပြီး အပို package များ ထပ်ထည့်ရန် မလိုပါ။ ဤနေရာရှိ စမ်းသပ်မှုများအတွက် macOS ပေါ်တွင် Python 3.14.3 ကို အသုံးပြုထားသည်။ သင့် Windows စက်တွင် Python launcher ကို အသုံးပြုပါက py -3 အစား python3ဖြင့် အစားထိုးသုံးပါ၊ ထို environment တွင် စမ်းသပ်ထားခြင်း မရှိပါ။
ထိုဖိုင်တွဲထဲတွင် terminal ကို ဖွင့်ပါ။ ဤဥပမာများတွင် input.srt နေရာ၌ သင့်ဖိုင်အမည်အစစ်ဖြင့် အစားထိုးပါ။ space ပါဝင်သော ဖိုင်လမ်းကြောင်းများတွင် မျက်တောင်အဖွင့်အပိတ်များကို ထည့်သွင်းထားပါ။
မူရင်းအတိုင်း မပျက်မစီး ကော်ပီတစ်ခု ပြုလုပ်ပါ
python3 subtitle_encoding.py backup "input.srt" "original-bytes.srt"
သိမ်းဆည်းမည့်ဖိုင်အမည်သည် ကြိုတင်ရှိနှင့်ပြီးသား မဖြစ်ရပါ။ အဆိုပါ tool သည် bytes များကို decode မလုပ်ဘဲ ကော်ပီကူးယူပြီး၊ ကူးယူထားသောဖိုင်ကို ပြန်လည်ဖတ်ရှုကာ ၎င်း၏ SHA-256 hash ကို အစီရင်ခံပေးမည်ဖြစ်သည်။ မူရင်းဖိုင်လမ်းကြောင်းကိုလည်း သိမ်းဆည်းမည့်နေရာအဖြစ် လက်ခံမည်မဟုတ်ပါ။ အသုံးပြု၍ရသော စာတန်းထိုးဖိုင်ကို ရရှိပြီးသည့်တိုင် ဤ backup ကို သိမ်းဆည်းထားပါ။
မည်သည့်အရာကိုမျှ မသိမ်းဆည်းဘဲ UTF-8 ကို စစ်ဆေးပါ
python3 subtitle_encoding.py inspect "original-bytes.srt"
အစီရင်ခံစာတွင် strict_utf8, utf8_bom၊ ရွေးချယ်ထားသော decoding နှင့်—အဆိုပါ decoding အောင်မြင်ပါက—စာသားအစမ်းပြသမှုနှင့် replacement_characters အရေအတွက်ကို ပြသပေးပါသည်။ ၎င်း၏ မူရင်း စာသားပြသမှုသည် utf-8-sigကို အသုံးပြုထားပြီး ရှေ့ဆုံးမှပါလာသော UTF-8 signature ကို ကိုင်တွယ်ဖြေရှင်းပေးပါသည်။
strict_utf8: falseဆိုသည်မှာ ထို byte များသည် UTF-8 စစ်ဆေးမှုကို မအောင်မြင်ခြင်းကို ဆိုလိုသည်။ ယင်းသည် အခြား မည်သည့် encoding မှန်ကန်သည်ကို ဖော်ပြမပေး ပါ။strict_utf8: trueဆိုသည်မှာ ၎င်းတို့ကို UTF-8 အဖြစ် decode လုပ်နိုင်သည်ဟု ဆိုလိုသည်။ ယင်းသည် စကားလုံးများ မှန်ကန်နေသည်ဟု မဆိုလို ပါ။- သုညမဟုတ်သော အစားထိုးမှု အရေအတွက်တစ်ခု ရှိနေခြင်းသည် ရွေးချယ်ထားသော decoding ကြောင့် U+FFFD စာလုံးများ ထွက်ပေါ်လာစေသည်ကို ဆိုလိုသည်။ ဖိုင်အသစ်တစ်ခု မဖန်တီးမီ ၎င်းတို့ကို အသေးစိတ် စစ်ဆေးပါ။
စစ်ဆေးမှုလုပ်ဆောင်ရာတွင် terminal font ကြောင့် စာလုံး၏ အစစ်အမှန်ပုံစံ မကွယ်ဝှက်သွားစေရန် ASCII-safe JSON ဖြင့် ထုတ်ပြပေးသည်- \u00e9 သည် éကို ဆိုလိုပြီး \ufffd သည် အစားထိုးစာလုံးကို ဆိုလိုပါသည်။ သံသယဖြစ်ဖွယ် စာကြောင်းတစ်ခုကို အသေးစိတ် စစ်ဆေးရန်အတွက် cue နံပါတ် မဟုတ်ဘဲ ၎င်း၏ အမှန်တကယ် စာကြောင်းနံပါတ် (physical line number) ကို တောင်းဆိုပါ-
python3 subtitle_encoding.py inspect "original-bytes.srt" --encoding cp1252 --line 3
ဤသည်မှာ Python ၏ Windows-1252ဖြစ်သော cp1252 codec ကို ဖတ်ရှုရုံသီးသန့် စမ်းသပ်ခြင်း ဖြစ်ပါသည်။ export ဆက်တင်များ သို့မဟုတ် မူရင်းဖိုင်မှတ်တမ်းက ထိုရွေးချယ်မှုကို ထောက်ခံနေမှသာ ၎င်းကို အသုံးပြုပါ၊ ဤနမူနာတွင် ပြင်သစ်ဘာသာစကား ဖြစ်နေရုံသက်သက်ဖြင့် မသုံးပါနှင့်။ စာကြောင်းအစီရင်ခံစာသည် စာလုံးတစ်ခုစီကို အမည်ဖော်ပြပေးပြီး ၎င်း၏ code point ကို ပြသပေးသည်၊ U+20AC သည် ယူရိုသင်္ကေတ ဖြစ်ပါသည်။
ပထမဆုံး အဆင်ပြေပြေ မြင်ရသည့် နမူနာကို ကြည့်ရုံမဟုတ်ဘဲ အထောက်အထားကို အခြေခံ၍ encoding ကို ရွေးချယ်ပါ
အမှန်တကယ် export ပြုလုပ်ခဲ့သည့် encoding ကို ဖိုင်ဖန်တီးသူထံ မေးမြန်းပါ၊ export ပြုလုပ်သည့် application ၏ ဆက်တင်များကို စစ်ဆေးပါ သို့မဟုတ် ယုံကြည်စိတ်ချရသော မူရင်းစာသားမှတ်တမ်းနှင့် နှိုင်းယှဉ်ကြည့်ပါ။ ဖိုင်တစ်လျှောက်လုံးရှိ အသံထွက်အမှတ်အသားပါသော အမည်များ၊ ပုဒ်ဖြတ်ပုဒ်ရပ်များ၊ ငွေကြေးသင်္ကေတများနှင့် ကိုယ်စားပြုစာကြောင်းများကို ပြန်လည်စစ်ဆေးပါ။ အကယ်၍ သင်သည် ထိုဘာသာစကားကို မဖတ်တတ်ပါက အောင်မြင်စွာ decode လုပ်နိုင်ရုံမျှဖြင့် ထိုသို့သော ပြန်လည်စစ်ဆေးမှုကို သင့်အတွက် ဆောင်ရွက်ပေးနိုင်မည် မဟုတ်ပါ။
“ANSI” သည် မူရင်း codec ကို ရွေးချယ်ရန်အတွက် တိကျမှု အလုံအလောက် မရှိပါ။ Windows-1252 နှင့် Latin-1 တို့သည်လည်း အချင်းချင်း အစားထိုး၍ မရနိုင်ပါ။ ဖော်ပြထားသော စမ်းသပ်မှုတွင် byte တစ်ခုတည်းဖြစ်သည့် 80 သည် € အောက်တွင် cp1252အဖြစ် decode လုပ်သော်လည်း control character ဖြစ်သော U+0080 အောက်တွင် latin-1ဖြစ်သွားသည်။ လုပ်ဆောင်ချက်နှစ်ခုစလုံး အောင်မြင်ပါသည်။ မည်သည့်အရာက အမှန်တကယ်ရည်ရွယ်ထားသည်ကို မူရင်းအချက်အလက်ကို သိရှိမှသာ ဆုံးဖြတ်နိုင်မည်ဖြစ်သည်။
အခြားဘာသာစကားများသည် ကွဲပြားသော ရှေးဟောင်း encoding များကို အသုံးပြုနိုင်သော်လည်း ဘာသာစကားအမည်တစ်ခုတည်းဖြင့် မည်သည့် encoding ဖြစ်သည်ကို အတည်မပြုနိုင်ပါ။ နောက်ခံသမိုင်းကြောင်းကို မသိရှိဘဲ ဖြစ်နိုင်ခြေရှိသော ဖတ်ရှုမှုရလဒ်များ ကွဲလွဲနေပါက ပြောင်းလဲခြင်းမပြုမီ ရပ်တန့်ပြီး ပိုမိုခိုင်လုံသော မူရင်းအထောက်အထားကို ရှာဖွေပါ။
မူရင်းစာသားကို ဖတ်ရှုနိုင်မှသာ ပြောင်းလဲပါ
Windows-1252 ဖြစ်ကြောင်း အတည်ပြုပြီးသော မူရင်းဖိုင်အတွက် သီးခြား UTF-8 ဖိုင်အသစ်တစ်ခုကို ဖန်တီးပါ-
python3 subtitle_encoding.py convert "original-bytes.srt" "repaired-utf8.srt" --from-encoding cp1252
python3 subtitle_encoding.py inspect "repaired-utf8.srt"
ဤပြောင်းလဲသည့်ကိရိယာသည် မူရင်းတစ်ခုလုံးကို တိကျစွာ decode လုပ်ပြီး၊ ထိုစာသားကို UTF-8 အဖြစ် encode လုပ်ကာ၊ ထွက်လာသော output ကို ပြန်လည် decode လုပ်ပါက မူလစာသားအတိုင်း ပြန်ရမရ စစ်ဆေးပြီး ရေးသားထားသော byte များကို ပြန်ဖတ်သည်။ ၎င်းသည် cue နံပါတ်များ၊ အချိန်မှတ်တမ်းများ၊ စကားပြောခန်းများ၊ tag များနှင့် စာကြောင်းအဆုံးသတ်များကို ပြင်ဆင်ခြင်းမပြုပါ။ decode လုပ်ထားသော စာသားသည် ထပ်တူညီနေသော်လည်း byte အစီအစဉ်သစ်မှာ ကွဲပြားနိုင်ပါသည်။
၎င်းသည် အောက်ပါအခြေအနေများတွင် တမင်တကာ လုပ်ဆောင်ခွင့်မပြုပါ-
- ရှိပြီးသား ဖိုင်အမည်ပေါ် ထပ်ရေးခြင်း၊
- တိကျသော decoding အမှားတစ်ခုကို ကျော်လွန်၍ ဆက်လက်လုပ်ဆောင်ခြင်း၊ သို့မဟုတ်
- အဆိုပါစာလုံးသည် တမင်ထည့်ထားခြင်းဖြစ်စေကာမူ U+FFFD ပါဝင်သော စာသားကို ရေးသားခြင်း။
နောက်ဆုံးကန့်သတ်ချက်မှာ သတိထားထိန်းသိမ်းရန်ဖြစ်သည်- ဤကိရိယာသည် အစားထိုးစာလုံး (replacement character) မည်သည့်အရာကို ကိုယ်စားပြုရန် ရည်ရွယ်သည်ကို မဆုံးဖြတ်နိုင်ပါ။ command အောင်မြင်စေရန် ၎င်းကို ဖယ်ရှားလိုက်ခြင်းသည် စာသားကို ပြန်လည်ရယူခြင်းမဟုတ်ဘဲ အထောက်အထားကို ဖျက်ဆီးပစ်ခြင်းသာ ဖြစ်ပါလိမ့်မည်။ Python ၏ အမှားကိုင်တွယ်မှုဆိုင်ရာ စာရွက်စာတမ်းများ (error-handler documentation) တွင် replace နှင့် ignore တို့သည် အဘယ်ကြောင့် တိကျသော decoding နှင့် ကွဲပြားကြောင်း ရှင်းပြထားပါသည်- ၎င်းတို့သည် ပြဿနာရှိသော အချက်အလက်များကို အစားထိုးခြင်း သို့မဟုတ် ဖယ်ထုတ်ပစ်ခြင်းများ ပြုလုပ်ကြသည်။ ထိုနည်းလမ်းနှစ်ခုစလုံးသည် ဤပြောင်းလဲခြင်းအဆင့်တွင် အသုံးမပြုသင့်ပါ။
I/O အမှားအယွင်း ဖြစ်ပေါ်ပါက မအောင်မြင်သော output ကို အသုံးမပြုပါနှင့်။ တစ်စိတ်တစ်ပိုင်းသာ ပြီးစီးသေးသော အသစ် ဖိုင် ကျန်ရှိနေနိုင်သည်၊ မူရင်းဖိုင်ကို မပျက်မစီးသိမ်းထားပြီး နောက်တစ်ကြိမ်ကြိုးစားရာတွင် ဖိုင်အမည်အသစ်ကို အသုံးပြုပါ။ ကိရိယာ၏ အသေးစိတ်လုပ်ဆောင်ချက်နှင့် အသုံးပြုပုံ အပြည့်အစုံကို ဒေါင်းလုဒ်လုပ်နိုင်သော README.
BOM ပါဝင်သော UTF-8 ဆိုလျှင် မည်သို့ဖြစ်မည်နည်း။
UTF-8 BOM ဆိုသည်မှာ ရှေ့ဆုံးတွင်ပါရှိသော byte အစီအစဉ်ဖြစ်သည့် EF BB BFဖြစ်သည်။ Python ၏ utf-8-sig codec သည် decode လုပ်ချိန်တွင် ထို signature ကို ဖယ်ရှားပြီး encode လုပ်ချိန်တွင် ထည့်သွင်းပေးသည်။
BOM ပါဝင်သည့် အတည်ပြုထားသော UTF-8 ရင်းမြစ်တစ်ခုအတွက် --from-encoding utf-8-sigကို အသုံးပြုပါ။ အဆိုပါကိရိယာသည် ပုံမှန်အားဖြင့် BOM မပါဝင်ဘဲ UTF-8 အဖြစ် ရေးသားလေ့ရှိပြီး လက်ခံမည့် အက်ပ်၏ သတ်မှတ်ချက်များက အမှန်တကယ် လိုအပ်မှသာ --with-bom ကို ထည့်သွင်းပါ။ BOM ကို ပြောင်းလဲရုံဖြင့် café အဖြစ်သို့ ပြောင်းလဲမသွားနိုင်ပါ။ ဤစမ်းသပ်ချက်သည် မည်သည့် သီးခြား player၊ တည်းဖြတ်ဆော့ဖ်ဝဲ သို့မဟုတ် တင်ပို့သည့် ပလက်ဖောင်းနှင့်မဆို ကိုက်ညီမှုရှိကြောင်း သက်သေပြခြင်း မဟုတ်ပါ။ caféဖိုင်အသေးစားငါးခုက UTF-8 တရားဝင်ရုံနှင့် အဘယ်ကြောင့် မလုံလောက်ကြောင်း ပြသနေသည်
ဤစမ်းသပ်ချက်တွင် ကိုယ်တိုင်ရေးသားထားသော ပြင်သစ်စာတန်းထိုး အပိုဒ်နှစ်ခုကို အသုံးပြုထားပါသည်။ ၎င်းတို့ကို မည်သည့်ရုပ်ရှင်၊ ဖောက်သည် သို့မဟုတ် ဘာသာပြန်ထုတ်ကုန်ထံမှမျှ ရယူထားခြင်း မဟုတ်ပါ -
၂၀၂၆ ခုနှစ်၊ စက်တင်ဘာလ ၁၃ ရက်နေ့တွင် Python 3.14.3 standard-library script တစ်ခုသည် byte ပုံစံငါးခုကို ဖန်တီးခဲ့ပြီး တစ်ခုချင်းစီကို သိရှိပြီးဖြစ်သော အဆိုပါ ရင်းမြစ်နှင့် နှိုင်းယှဉ်စစ်ဆေးခဲ့သည်။ ဤအရာများသည် byte နှင့် string တိကျမှု စစ်ဆေးချက်များသာဖြစ်ပြီး ဘာသာပြန်အရည်အသွေး စံသတ်မှတ်ချက် မဟုတ်ပါ။ ဘရောက်ဆာ အကြိုကြည့်ရှုမှုမှ ကူးယူခြင်းထက် ချိတ်ဆက်ထားသော ဖိုင်များကို သင့်စက်ထဲသို့ တိုက်ရိုက်သိမ်းဆည်းပါ - ကွဲပြားသော byte များသည် ဤစမ်းသပ်ချက်၏ အဓိကအချက်ဖြစ်သောကြောင့် ဖြစ်သည်။
1
00:00:01,000 --> 00:00:04,000
Émile dit : « Le prix est de 12,50 €. »
2
00:00:05,000 --> 00:00:08,000
Le café est fermé.
ဒေါင်းလုဒ်လုပ်နိုင်သော မိတ္တူ
| Bytes | တိကျသော UTF-8 ဟုတ်ပါသလား။ | UTF-8 အဖြစ် decode လုပ်ပါက စာသားမှန်ကန်မှု ရှိပါသလား။ | ၎င်း၏ UTF-8 စာသားတွင် U+FFFD အဖြစ် သိမ်းဆည်းထားသည် | မူရင်း UTF-8 |
|---|---|---|---|---|
| ဟုတ်ပါသည် | 132 | ဟုတ်ပါသည် | မူရင်း Windows-1252 | 0 |
| မဟုတ်ပါ | 125 | UTF-8 အဖြစ် decode မလုပ်နိုင်ပါ၊ | အောက်တွင်သာ မှန်ကန်ပါသည် cp1252 | သက်ဆိုင်မှုမရှိပါ |
| မှားယွင်းသော decoder ဖြင့် UTF-8 အဖြစ် ပြန်လည်သိမ်းဆည်းထားသည် | 147 | ဟုတ်ပါသည် | မဟုတ်ပါ | 0 |
| အစားထိုး အက္ခရာများပါဝင်ပြီး UTF-8 အဖြစ် ပြန်လည်သိမ်းဆည်းထားသည် | 137 | ဟုတ်ပါသည် | မဟုတ်ပါ | 6 |
| မှန်ကန်စွာ ပြောင်းလဲထားသော UTF-8 | 132 | ဟုတ်ပါသည် | ဟုတ်ပါသည် | 0 |
မိတ္တူတိုင်းတွင် တူညီသော အချိန်မှတ်သားချက် စာသားနှစ်ခု ပါရှိနေဆဲဖြစ်ပါသည်။ မှန်ကန်စွာ ပြောင်းလဲထားသော ဖိုင်သည် မူရင်း UTF-8 ဖိုင်နှင့် ဘိုက်တစ်ခုချင်းအထိ အတိအကျ တူညီပါသည်။ ပျက်စီးသွားသော UTF-8 ဖိုင်နှစ်ခုက ပိုမိုကျဉ်းမြောင်းသော်လည်း အသုံးဝင်သည့် အချက်တစ်ခုကို သက်သေပြနေပါသည်— ၎င်းမှာ မှန်ကန်သော encoding ဖြစ်နေခြင်း သို့မဟုတ် မပြောင်းလဲသော အချိန်မှတ်သားချက်များ ရှိနေခြင်းသည် စာတန်းထိုးစာသားများ မှန်ကန်နေသည်ဟု မဆိုလိုနိုင်ခြင်း ဖြစ်ပါသည်။ တူညီသော အချိန်မှတ်သားချက်များ ရှိနေရုံဖြင့် ဤဖန်တီးထားသော အသံ/စာတန်းသည် အမှန်တကယ် ဗီဒီယိုနှင့် ကိုက်ညီမှု ရှိမရှိကိုလည်း မဖော်ပြနိုင်ပါ။
အဆိုပါ ဖိုင်ငါးခုကို သင်ကိုယ်တိုင် ပြန်လည်စမ်းသပ်ထုတ်ယူရန် reproduce.py ကို ဒေါင်းလုဒ်လုပ်ပြီး မတည်ရှိသေးသော ဖိုဒါအမည်တစ်ခုဖြင့် run ပါ-
python3 reproduce.py encoding-experiment
အဆိုပါ script သည် စမ်းသပ်မှုဖိုင်များနှင့် စာသားအပြည့်အစုံ၊ အသွင်ပြောင်းလဲမှုများ၊ hash များ၊ runtime ဗားရှင်းနှင့် အတည်ပြုချက်များ ပါဝင်သော results.json ဖိုင်တစ်ခုကို ရေးသားထုတ်ပေးမည်ဖြစ်ပါသည်။ ၎င်းကို မှတ်တမ်းတင်ထားသော စမ်းသပ်မှုရလဒ်များနှင့် နှိုင်းယှဉ်ကြည့်နိုင်ပါသည်၊ ထုတ်ယူသည့် အချိန်မှတ်သားချက်သာ ကွာခြားပါလိမ့်မည်။ script များနှင့် မူရင်းသင်ကြားရေးဖိုင်များတွင် MIT လိုင်စင်.
ပါဝင်ပါသည်။ စက်တွင်း ကူးပြောင်းမှုစစ်ဆေးချက်များသည် လက်ရှိ output ဖိုင်ကို ငြင်းပယ်ခြင်း၊ source-path ငြင်းပယ်ခြင်း၊ မမှန်ကန်သော codec ချို့ယွင်းချက်၊ U+FFFD ငြင်းပယ်ခြင်း၊ CRLF ထိန်းသိမ်းခြင်းနှင့် တိကျသော BOM ထုတ်ပေးခြင်းတို့ကိုလည်း စမ်းသပ်စစ်ဆေးထားပါသည်။ ထိုစစ်ဆေးချက်များသည် ဤတူးလ်၏ ဖိုင်လုပ်ဆောင်ပုံကိုသာ အတည်ပြုခြင်းဖြစ်ပါသည်။ player များတွင် ပြသပုံ၊ အမှန်တကယ် မီဒီယာအချိန်ကိုက်မှု သို့မဟုတ် BookTranslator ဖြင့် ဘာသာပြန်ဆိုမှုတို့ကို စမ်းသပ်ထားခြင်း မဟုတ်ပါ။
ပျက်စီးနေသော စာလုံးများကို သိမ်းဆည်းပြီးသား ဖြစ်နေပါက
သိမ်းဆည်းထားသော စာလုံးဖတ်မရခြင်း (mojibake) - အဆင့်ဆင့်ဖြစ်ပျက်ခဲ့သည့် သမိုင်းကြောင်းအတိအကျကို စစ်ဆေးပါ
ကျွန်ုပ်တို့၏ စာလုံးဖတ်မရသော ဖိုင်မိတ္တူသည် လူသိများသော အဆင့်ဆင့်ဖြစ်စဉ်တစ်ခုအတိုင်း ဖြစ်ပေါ်ခဲ့ပါသည်- မူရင်း UTF-8 ဘိုက်များကို Windows-1252 အဖြစ် decode လုပ်ခဲ့ပြီး ထိုမှားယွင်းနေသော စာလုံးများကို UTF-8 အဖြစ် ပြန်လည်သိမ်းဆည်းခဲ့ခြင်း ဖြစ်ပါသည်။ ရလဒ်အနေဖြင့် café နှင့် ပျက်စီးသွားသော ယူရိုအမှတ်အသား အစီအစဉ် €.
တို့ ပါဝင်လာပါသည်။ ဤတိကျသော အသွင်ပြောင်းမှုတွင် ဘိုက်များ ဆုံးရှုံးသွားခြင်း မရှိသောကြောင့် ပြန်လည်စမ်းသပ်ထုတ်ယူသည့် script သည် ၎င်းကို မူလအတိုင်း ပြန်ပြောင်းပေးနိုင်ပါသည်- မှားယွင်းနေသော စာသားကို cp1252သို့ ပြန်လည် encode လုပ်ပြီး ထွက်ပေါ်လာသော ဘိုက်များကို UTF-8 အဖြစ် decode ပြန်လုပ်ခြင်း ဖြစ်ပါသည်။ ၎င်းသည် ပြန်လည်ရယူထားသော စာသားကို မူရင်းစာသားနှင့် ကိုက်ညီမှု ရှိမရှိ စစ်ဆေးပေးပါသည်။
၎င်းသည် ဤလူသိများသော အဆင့်ဆင့်ဖြစ်စဉ်အတွက် သက်သေသာဖြစ်ပြီး SRT ဖိုင်တိုင်းကို ယေဘုယျဆန်ဆန် “ပျက်စီးနေသော စာလုံးများကို ပြုပြင်ခြင်း” လုပ်ဆောင်ရန် ညွှန်ကြားချက် မဟုတ်ပါ။ ဖိုင်တစ်ခုတွင် မှန်ကန်သော စာလုံးများ၊ ရောထွေးနေသော နောက်ခံသမိုင်းကြောင်းများ သို့မဟုတ် ယခင်က ပြုပြင်မှုတစ်ခုကြောင့် ပြောင်းလဲသွားပြီးဖြစ်သော စာသားများ ပါဝင်နေနိုင်ပါသည်။ မူလအတိုင်းရှိနေသော source ဖိုင်နှင့် သာမန်ကူးပြောင်းမှုနည်းလမ်းကိုသာ ဦးစားပေးသုံးပါ။ သိမ်းဆည်းထားပြီးဖြစ်သော စာလုံးပျက်ဖိုင်သာ ကျန်ရှိတော့ပါက ၎င်းကို မူရင်းအတိုင်း ထိန်းသိမ်းထားပြီး နောက်ထပ်မိတ္တူတစ်ခုပေါ်တွင် ပြောင်းပြန်အသွင်ပြောင်းလဲမှု မပြုလုပ်မီ ၎င်းကို မည်သို့ထုတ်လုပ်ခဲ့သည်ကို အတည်ပြုပါ။
အစားထိုးအက္ခရာများအဖြစ် သိမ်းဆည်းခံရခြင်း- ပျောက်ဆုံးနေသော အက္ခရာကို ထိုနေရာတွင် ကုဒ်ထည့်သွင်းထားခြင်း မရှိပါ
အချက်အလက်ဆုံးရှုံးမှု စမ်းသပ်ချက်နမူနာကို Windows-1252 ဘိုက်များကို အစားထိုးခြင်းဖွင့်ထားသည့် UTF-8 အဖြစ် ဒီကုဒ်လုပ်ပြီး ရလဒ်ကို သိမ်းဆည်းခြင်းဖြင့် ပြုလုပ်ထားခြင်းဖြစ်သည်။ မူရင်းအက္ခရာ အမျိုးမျိုးတို့သည် တူညီသော � အမှတ်အသားအဖြစ် ပြောင်းလဲသွားသည်။ ထိုသိမ်းဆည်းထားသော အမှတ်အသားတွင် မူလနေရာ၌ မည်သည့် မူရင်းအက္ခရာ တည်ရှိခဲ့သည်ကို ခွဲခြားသိရှိနိုင်ရန် လုံလောက်သော အချက်အလက်များ မပါဝင်တော့ပါ။
ဤအခြေအနေကို အက်ပ်တစ်ခုအတွင်း၌ တွေ့မြင်နေရရုံမျှနှင့် � မမှားယွင်းပါစေနှင့်။ မူရင်းဘိုက်များကို မထိခိုက်ဘဲ နဂိုအတိုင်း ကျန်ရှိနေသေးပါက မှန်ကန်သော ဒီကုဒ်လုပ်ခြင်းဖြင့် ကျွန်ုပ်တို့၏ Windows-1252 မူရင်းဖိုင်ကဲ့သို့ပင် စာသားကို ပြန်လည်ရယူနိုင်ဆဲ ဖြစ်သည်။ အချက်အလက် ဆုံးရှုံးသွားပြီဟု မသတ်မှတ်မီ ထိုမူရင်းဖိုင်ကို ဦးစွာ စစ်ဆေးပါ။
ကျန်ရှိနေသော တစ်ခုတည်းသော ဖိုင်မိတ္တူတွင် ပျောက်ဆုံးစာသားများကို U+FFFD သို့မဟုတ် အမှန်တကယ် မေးခွန်းထုတ်သင်္ကေတများဖြင့် အစားထိုးသိမ်းဆည်းထားပြီးဖြစ်ပါက အမှားအယွင်းမရှိသော မူရင်းဖိုင်ကို ပြန်လည်ထုတ်ယူပါ (သို့မဟုတ်) ပြန်လည်ရယူပါ၊ သို့မဟုတ်ပါက စိတ်ချရသော မူရင်းအကြောင်းအရာများနှင့် ကိုက်ညှိပြီး လက်ဖြင့် စာရိုက်အတည်ပြုပါ။ သာမန် မေးခွန်းထုတ်သင်္ကေတသည်လည်း အမှန်တကယ် သဒ္ဒါအရ သုံးစွဲထားသော ပုဒ်ဖြတ်ပုဒ်ရပ် ဖြစ်နိုင်သောကြောင့် ၎င်းသင်္ကေတ ရှိနေရုံမျှဖြင့် မည်သည့်အရာကိုမျှ အတည်မပြုနိုင်ပါ။ AI မော်ဒယ်တစ်ခု၏ ဖြစ်နိုင်ခြေရှိသော အစားထိုးပေးမှုသည် ခန့်မှန်းချက်သာဖြစ်ပြီး ပြန်လည်ရရှိလာသည့် မူရင်းဖိုင်ဒေတာ မဟုတ်ပါ။
အောင်မြင်သော command ဖြင့်သာမက ဖတ်ရှုနိုင်သော မူရင်းစာသားဖြင့် အဆုံးသတ်ပါ
ပြုပြင်ထားသော ဖိုင်ကို လက်မခံမီ စိတ်ချရသော မူရင်းစာသားနှင့် ကိုယ်စားပြုစကားလုံးများ၊ သင်္ကေတများကို နှိုင်းယှဉ်စစ်ဆေးပါ၊ cue များနှင့် အချိန်မှတ် (timestamp) လိုင်းများ ပြောင်းလဲသွားခြင်း မရှိကြောင်း အတည်ပြုပါ၊ ထို့နောက် အသုံးပြုမည့် အက်ပ်အတွင်း၌ ဖိုင်အသစ် ကို ဖွင့်ကြည့်ပါ။ ဤ script သည် ဒီကုဒ်လုပ်ထားသော စာသားကိုသာ ထိန်းသိမ်းပေးခြင်းဖြစ်ပြီး SRT syntax စစ်ဆေးပေးသည့် ကိရိယာ သို့မဟုတ် ဗီဒီယိုပြသမှု အတည်ပြုစစ်ဆေးချက် မဟုတ်ပါ။
အကယ်၍ သင်သည် စာတန်းထိုးများကို ဖတ်ရှုနိုင်ပြီဖြစ်ပြီး အခြားဘာသာစကား မလိုအပ်တော့ပါက လုပ်ငန်းစဉ် ပြီးဆုံးပါပြီ။ အကယ်၍ ဗီဒီယိုနှင့် လက်တွေ့ချိန်ညှိကြည့်ရှုရန် သို့မဟုတ် ထပ်မံတည်းဖြတ်ရန် လိုအပ်ပါက စာတန်းထိုး ဆော့ဖ်ဝဲလ် နှိုင်းယှဉ်ချက် တွင် ကိရိယာအမျိုးမျိုး၏ အခန်းကဏ္ဍများကို ရှင်းပြထားပါသည်။
မူရင်းစာသားသည် စိတ်ချယုံကြည်ရပြီး အခြားဘာသာစကားတစ်ခုသို့ အမှန်တကယ် ပြန်ဆိုရန် လိုအပ်မှသာ BookTranslator ၏ Subtitle Translator နှင့် AI စာတန်းထိုး ဘာသာပြန်ခြင်း လုပ်ငန်းစဉ်သို့ ဆက်လက်လုပ်ဆောင်ပါ။ encoding ပြင်ဆင်ခြင်း၊ ဘာသာပြန်ခြင်းနှင့် နောက်ဆုံးဖိုင်ကို ကြည့်ရှုစစ်ဆေးခြင်းတို့ကို သီးခြားလုပ်ငန်းများအဖြစ် သဘောထားပါ။ တစ်ခုအောင်မြင်ရုံဖြင့် ကျန်အဆင့်များ အောင်မြင်သည်ဟု သက်သေမပြနိုင်ပါ။
ဆက်စပ် ဆောင်းပါးများ




