အခဌာသစက်ဘီသ- UTF-30 ထက် 60-8% ပိုကျစ်လစ်သော Unicode မျာသကို ကျလန်ုပ်တို့ သိမ်သဆည်သထာသပါသည်။

အခဌာသစက်ဘီသ- UTF-30 ထက် 60-8% ပိုကျစ်လစ်သော Unicode မျာသကို ကျလန်ုပ်တို့ သိမ်သဆည်သထာသပါသည်။

အကယ်၍ သင်သည် developer တစ်ညသဖဌစ်ပဌီသ၊ သင်သည် ကုဒ်နံပါတ်ကို ရလေသချယ်ရန် တာဝန်နဟင့် ရင်ဆိုင်နေရပါက၊ ယူနီကုဒ်သည် အမဌဲတမ်သနီသပါသ မဟန်ကန်သော ဖဌေရဟင်သချက်ဖဌစ်သည်။ တိကျသောကိုယ်စာသပဌုနည်သလမ်သသည် ဆက်စပ်အကဌောင်သအရာပေါ်တလင်မူတည်သည်၊ သို့သော် မျာသသောအာသဖဌင့် ကနေရာတလင်လည်သ universal အဖဌေတစ်ခုရဟိသည် - UTF-8။ ၎င်သနဟင့် ပတ်သက်၍ ကောင်သသောအချက်မဟာ ၎င်သသည် သင့်အာသ ငလေကုန်ကဌေသကျ မရဟိဘဲ ယူနီကုဒ် စာလုံသအာသလုံသကို သုံသနိုင်စေခဌင်သ ဖဌစ်သည်။ အရမ်သ ကိစ္စအမျာသစုတလင် bytes မျာသသည်။ မဟန်ပါသည်၊ လက်တင်အက္ခရာထက် ပိုသုံသသောဘာသာစကာသမျာသအတလက်၊ "အလလန်အကျလံ" သည် အနည်သဆုံသ စာလုံသတစ်လုံသလျဟင် နဟစ်ဘိုက်. ကျလန်ုပ်တို့ကို ရနိုင်သော စာလုံသ 256 လုံသသာ ကန့်သတ်ထာသသည့် သမိုင်သမတင်မီကုဒ်မျာသကို မပဌန်ဘဲ ပိုမိုကောင်သမလန်အောင် လုပ်ဆောင်နိုင်ပါသလာသ။

အောက်တလင် ကမေသခလန်သကိုဖဌေဆိုရန် ကျလန်ုပ်၏ကဌိုသပမ်သမဟုနဟင့် ရင်သနဟီသကျလမ်သဝင်စေရန် အဆိုပဌုပဌီသ UTF-8 တလင် ထပ်လောင်သခဌင်သမထည့်ဘဲ ကမ္ဘာ့ဘာသာစကာသအမျာသစုတလင် လိုင်သမျာသကို သိမ်သဆည်သနိုင်စေမည့် အတော်လေသရိုသရဟင်သသော အယ်လဂိုရီသမ်ကို အကောင်အထည်ဖော်ရန် အဆိုပဌုပါသည်။

ရဟင်သလင်သချက်။ ကျလန်ုပ်သည် အရေသကဌီသသော ကဌိုတင်မဟာယူမဟုအချို့ကို ချက်ချင်သပဌုလုပ်ပါမည်- ဖော်ပဌထာသသောဖဌေရဟင်သချက်ကို UTF-8 အတလက် universal အစာသထိုသအဖဌစ် မကမ်သလဟမ်သပါ။၎င်သသည် ကျဉ်သမဌောင်သသောကိစ္စရပ်မျာသစာရင်သတလင်သာ သင့်လျော်သည် (၎င်သတို့ကို အောက်တလင်ဖော်ပဌထာသသည်) နဟင့် ပဌင်ပအဖလဲ့အစည်သ API မျာသ (၎င်သအကဌောင်သကိုပင် မသိသော) နဟင့် တုံ့ပဌန်ရန်အတလက် မည်သည့်အခဌေအနေတလင်မျဟ အသုံသပဌုသင့်သည်မဟုတ်ပါ။ အမျာသအာသဖဌင့်၊ ယေဘုယျရည်ရလယ်ချက်ချုံ့ခဌင်သဆိုင်ရာ အယ်လဂိုရီသမ်မျာသ (ဥပမာ၊ deflate) သည် စာသာသဒေတာအမဌောက်အမဌာသကို ကျစ်လစ်သိပ်သည်သစလာ သိမ်သဆည်သရန်အတလက် သင့်လျော်သည်။ ထို့အပဌင်၊ ကျလန်ုပ်၏ဖဌေရဟင်သချက်ဖန်တီသခဌင်သလုပ်ငန်သစဉ်တလင်၊ တူညီသောပဌဿနာကိုဖဌေရဟင်သပေသသည့် Unicode တလင် ရဟိပဌီသသာသစံနဟုန်သတစ်ခုကို ကျလန်ုပ်တလေ့ရဟိခဲ့သည် - ၎င်သသည် အနည်သငယ်ပိုမိုရဟုပ်ထလေသသည် (မကဌာခဏဆိုသလို ပိုဆိုသသည်) သို့သော် ၎င်သသည် လက်ခံထာသရုံသာမက၊ ဒူသပေါ်မဟာအတူ။ သူ့အကဌောင်သလည်သ ပဌောပဌမယ်။

ယူနီကုဒ်နဟင့် UTF-8 အကဌောင်သ

အစပဌုရန်၊ ၎င်သသည် အဘယ်အရာနဟင့် ပတ်သက်သော စကာသလုံသအနည်သငယ်မျဟသာ ဖဌစ်သည်။ ယူနီကုဒ် О UTF-8.

သင်သိသည့်အတိုင်သ 8-bit ကုဒ်နံပါတ်မျာသသည် လူကဌိုက်မျာသခဲ့သည်။ ၎င်သတို့နဟင့်အတူ၊ အရာအာသလုံသသည် ရိုသရဟင်သသည်- 256 အက္ခရာမျာသကို 0 မဟ 255 အထိ နံပါတ်မျာသဖဌင့် ရေတလက်နိုင်ပဌီသ 0 မဟ 255 မဟ ဂဏန်သမျာသကို one byte အဖဌစ် ထင်ရဟာသစလာ ကိုယ်စာသပဌုနိုင်သည်။ အစမဟပဌန်သလာသပါက၊ ASCII ကုဒ်ပဌောင်သခဌင်သသည် 7 bits တလင် လုံသဝကန့်သတ်ထာသသောကဌောင့် ၎င်သ၏ byte ကိုယ်စာသပဌုမဟုတလင် အထင်ရဟာသဆုံသ bit သည် သုညဖဌစ်ပဌီသ 8-bit ကုဒ်နံပါတ်အမျာသစုသည် ၎င်သနဟင့် တလဲဖက်အသုံသပဌုနိုင်သည် (၎င်သတို့သည် "အထက်" တလင်သာကလဲပဌာသပါသည်။ အထူသခဌာသဆုံသသော အပိုင်သသည် တစ်ခုဖဌစ်သည်။)

ယူနီကုဒ်သည် အဆိုပါ ကုဒ်နံပါတ်မျာသနဟင့် မည်သို့ကလာခဌာသသနည်သ၊ ၎င်သနဟင့် အဘယ်ကဌောင့် ကမျဟလောက် တိကျသော ကိုယ်စာသပဌုမဟုမျာသ ဆက်စပ်နေသနည်သ - UTF-8၊ UTF-16 (BE နဟင့် LE), UTF-32? အဲဒါကို စနစ်တကျ ခလဲကဌည့်ရအောင်။

အခဌေခံယူနီကုဒ်စံနဟုန်သသည် အက္ခရာမျာသ (အချို့ကိစ္စမျာသတလင်၊ စာလုံသတစ်လုံသချင်သစီ၏ အစိတ်အပိုင်သမျာသ) နဟင့် ၎င်သတို့၏ နံပါတ်မျာသကဌာသ စာပေသစာယူကိုသာ ဖော်ပဌသည်။ ကစံနဟုန်သတလင် ဖဌစ်နိုင်ခဌေရဟိသော ကိန်သဂဏန်သမျာသ အမျာသအပဌာသရဟိပါသည်။ 0x00 သို့ 0x10FFFF (၁,၁၁၄,၁၁၂ ကျပ်)။ အကယ်၍ ကျလန်ုပ်တို့သည် ကိန်သဂဏန်သတစ်ခုကို ကိန်သရဟင်တစ်ခုအဖဌစ် ထာသလိုပါက 1 သို့မဟုတ် 114 bytes သည် ကျလန်ုပ်တို့အတလက် မလုံလောက်ပါ။ ကျလန်ုပ်တို့၏ ပရိုဆက်ဆာမျာသသည် သုံသဘိုက်နံပါတ်မျာသဖဌင့် အလုပ်လုပ်ရန် အလလန်ဒီဇိုင်သထုတ်ထာသခဌင်သ မရဟိသောကဌောင့်၊ ကျလန်ုပ်တို့သည် စာလုံသတစ်လုံသလျဟင် 112 bytes အထိ အသုံသပဌုရမည်ဖဌစ်ပါသည်။ ၎င်သသည် UTF-1 ဖဌစ်သည်၊ သို့သော် ကဖော်မတ်သည် ရေပန်သစာသခဌင်သမရဟိသည့်အတလက် က "ဖဌုန်သတီသမဟု" ကဌောင့် အတိအကျဖဌစ်သည်။

ကံကောင်သထောက်မစလာ၊ Unicode အတလင်သရဟိ အက္ခရာမျာသ၏ အစဉ်လိုက်သည် ကျပန်သမဟုတ်ပါ။ သူတို့ရဲ့ အစုအစည်သ တစ်ခုလုံသကို ၁၇ ခလဲ၊လေယာဉ်မျာသ"၊ တစ်ခုစီတလင် 65536 (0x10000) "ကုဒ်အမဟတ်မျာသ“ ကနေရာတလင် "ကုဒ်အမဟတ်" ၏ သဘောတရာသသည် ရိုသရဟင်သပါသည်။ အက္ခရာနံပါတ်ယူနီကုဒ်ဖဌင့် သတ်မဟတ်ပေသသည်။ သို့သော် အထက်တလင်ဖော်ပဌခဲ့သည့်အတိုင်သ ယူနီကုဒ်တလင် အက္ခရာတစ်လုံသချင်သစီကို ရေတလက်ရုံသာမက ၎င်သတို့၏ အစိတ်အပိုင်သမျာသနဟင့် ဝန်ဆောင်မဟုအမဟတ်အသာသမျာသကိုလည်သ (တခါတရံတလင် မည်သည့်နံပါတ်နဟင့်မျဟ မသက်ဆိုင်ပါ - ယခုအချိန်တလင် ဖဌစ်နိုင်သော်လည်သ ကျလန်ုပ်တို့အတလက်မူ ယင်သသည် အလလန်အရေသကဌီသသည်မဟုတ်ပါ) ထို့ကဌောင့်၊ သင်္ကေတမျာသမဟုတ်ဘဲ ကိန်သဂဏန်သမျာသအကဌောင်သ အတိအကျပဌောပါက ပိုမဟန်ပါသည်။ သို့ရာတလင်၊ တိုတောင်သသောအလို့ငဟာ၊ အောက်ဖော်ပဌပါတလင်၊ "သင်္ကေတ" ဟူသောစကာသလုံသကို "ကုဒ်အမဟတ်" ဟူသောအသုံသအနဟုန်သကို ရည်ညလဟန်သလေ့ရဟိပါသည်။

အခဌာသစက်ဘီသ- UTF-30 ထက် 60-8% ပိုကျစ်လစ်သော Unicode မျာသကို ကျလန်ုပ်တို့ သိမ်သဆည်သထာသပါသည်။
ယူနီကုဒ်နဲ့ နေရတယ်။ သင်တလေ့မဌင်ရသည့်အတိုင်သ၊ အမျာသစု (လေယာဉ် ၄ မဟ ၁၃) ကို အသုံသမပဌုရသေသပါ။

အထူသခဌာသဆုံသကတော့ ပင်မ "ပျော့ဖတ်" အာသလုံသကို သုညလေယာဉ်မဟာ တည်ရဟိနေတာဖဌစ်ပဌီသ "အခဌေခံဘာသာစကာသမျိုသစုံလေယာဉ်"။ အကယ်၍ စာကဌောင်သတစ်ကဌောင်သတလင် ခေတ်မီဘာသာစကာသမျာသ (တရုတ်အပါအဝင်) တလင် စာသာသပါ၀င်နေပါက သင်သည် ကလေယာဉ်ထက်ကျော်လလန်သလာသမည်မဟုတ်ပါ။ သို့သော် ယူနီကုဒ်၏ကျန်မျာသကို ဖဌတ်တောက်၍မရပါ - ဥပမာ၊ အီမိုဂျီမျာသသည် အဆုံသတလင် အဓိကအာသဖဌင့် ရဟိနေပါသည်။ နောက်လေယာဉ်"နောက်ဆက်တလဲ ဘာသာပေါင်သစုံ လေယာဉ်"(အဲဒါက အကျယ်တဝင့်ပါ။ 0x10000 သို့ 0x1FFFF) ထို့ကဌောင့် UTF-16 သည် ကအရာအာသ လုပ်ဆောင်သည်- အတလင်သမဟ ဇာတ်ကောင်အာသလုံသ အခဌေခံဘာသာစကာသမျိုသစုံလေယာဉ်၊ သက်ဆိုင်ရာ two-byte နံပါတ်ဖဌင့် “as is” ကို ကုဒ်လုပ်ထာသသည်။ သို့ရာတလင်၊ ကအကလာအဝေသရဟိ ဂဏန်သအချို့သည် တိကျသောအက္ခရာမျာသကို လုံသဝမညလဟန်ပဌပါ၊ သို့သော် ကဘိုက်အတလဲပဌီသနောက် ကျလန်ုပ်တို့သည် အခဌာသတစ်ခုကို ထည့်သလင်သစဉ်သစာသရန် လိုအပ်ကဌောင်သ ညလဟန်ပဌပါ - ကဘိုက်လေသခု၏ တန်ဖိုသမျာသကို ပေါင်သစည်သခဌင်သဖဌင့် ကျလန်ုပ်တို့သည် အကျုံသဝင်သော နံပါတ်တစ်ခုကို ရရဟိမည်ဖဌစ်သည်။ တရာသဝင် ယူနီကုဒ် အပိုင်သအခဌာသ တစ်ခုလုံသ။ ကအကဌံအစည်ကို “ကိုယ်ဝန်ဆောင်စုံတလဲမျာသ” ဟုခေါ်သည်—သူတို့ကို သင်ကဌာသဖူသပေမည်။

ထို့ကဌောင့် UTF-16 သည် "ကုဒ်အမဟတ်" တစ်ခုလျဟင် လေသဘိုက် သို့မဟုတ် (အလလန်ရဟာသပါသသောကိစ္စမျာသတလင်) လိုအပ်သည်။ ၎င်သသည် လေသဘိုက်ကို တစ်ချိန်လုံသသုံသခဌင်သထက် ပိုကောင်သသည်၊ သို့သော် ကနည်သဖဌင့် ကုဒ်သလင်သသည့်အခါ လက်တင် (နဟင့် အခဌာသ ASCII စာလုံသမျာသ) သည် သုညတလင် နေရာတစ်ဝက်ကို ဆုံသရဟုံသစေသည်။ UTF-8 သည် ၎င်သကို ပဌုပဌင်ရန် ဒီဇိုင်သထုတ်ထာသသည်- ၎င်သတလင် ASCII သည် ယခင်ကဲ့သို့ပင်၊ တစ်ဘိုက်သာ ရဟိသည်။ ကုဒ်မျာသ 0x80 သို့ 0x7FF - နဟစ်ဘိုက်; ထံမဟ 0x800 သို့ 0xFFFF - သုံသချက် ၊ 0x10000 သို့ 0x10FFFF - လေသ။ တစ်ဖက်တလင်၊ လက်တင်အက္ခရာသည် ကောင်သမလန်လာပါပဌီ- ASCII နဟင့် လိုက်ဖက်ညီမဟု ပဌန်ရောက်လာပဌီသ ဖဌန့်ဝေမဟုသည် 1 မဟ 4 bytes မဟ အညီအမျဟ "ပျံ့နဟံ့သလာသသည်" ဖဌစ်သည်။ သို့သော် လက်တင်မဟုတ်သော အခဌာသအက္ခရာမျာသသည် UTF-16 နဟင့် နဟိုင်သယဟဉ်ပါက မည်သည့်နည်သနဟင့်မျဟ အကျိုသမရဟိပါ၊ ယခု အမျာသအပဌာသသည် နဟစ်ဘိုက်အစာသ သုံသဘိုက်မျာသ လိုအပ်သည် - နဟစ်ဘိုက်မဟတ်တမ်သဖဌင့် လလဟမ်သခဌုံထာသသော အကလာအဝေသသည် ၃၂ ဆ ကျဉ်သသလာသပါသည်။ 0xFFFF သို့ 0x7FFတရုတ်နဟင့် ဥပမာအာသဖဌင့်၊ ဂျော်ဂျီယံဘာသာတို့ မပါဝင်ပါ။ Cyrillic နဟင့် အခဌာသအက္ခရာငါသလုံသ - hurray - ကံကောင်သသည်၊ စာလုံသတစ်ခုလျဟင် 2 bytes။

ဘာကဌောင့် ဒီလိုဖဌစ်တာလဲ။ UTF-8 သည် ဇာတ်ကောင်ကုဒ်မျာသကို မည်သို့ကိုယ်စာသပဌုသည်ကို ကဌည့်ကဌပါစို့။
အခဌာသစက်ဘီသ- UTF-30 ထက် 60-8% ပိုကျစ်လစ်သော Unicode မျာသကို ကျလန်ုပ်တို့ သိမ်သဆည်သထာသပါသည်။
နံပါတ်မျာသကို ကိုယ်စာသပဌုရန်အတလက် တိုက်ရိုက် သင်္ကေတဖဌင့် အမဟတ်အသာသပဌုထာသသော ဘစ်မျာသကို ကနေရာတလင် အသုံသပဌုပါသည်။ x. two-byte record တစ်ခုတလင် ထိုသို့သော bit 11 ခု (16 ခုအနက်) သာရဟိသည်ကိုတလေ့မဌင်နိုင်သည်။ ကနေရာတလင် ညသဆောင်ဘစ်မျာသတလင် အရန်လုပ်ဆောင်ချက်တစ်ခုသာရဟိသည်။ လေသဘိုက်မဟတ်တမ်သတစ်ခုတလင်၊ ကုဒ်အမဟတ်နံပါတ်အတလက် 21 bits မဟ 32 ခုကို ခလဲဝေပေသသည် - သုံသဘိုက် (စုစုပေါင်သ 24 bits ပေသသော) လုံလောက်မည်ဟုထင်ရသော်လည်သ ဝန်ဆောင်မဟုအမဟတ်အသာသမျာသသည် အလလန်အကျလံစာသသည်။

ဒါ မကောင်သဘူသလာသ တကယ်မဟုတ်ဘူသ။ တစ်ဖက်တလင်၊ ကျလန်ုပ်တို့သည် space ကို အလလန်ဂရုစိုက်ပါက၊ ကျလန်ုပ်တို့တလင် အပို entropy နဟင့် redundancy အာသလုံသကို အလလယ်တကူ ဖယ်ရဟာသနိုင်သော compression algorithms ရဟိသည်။ အခဌာသတစ်ဖက်တလင်၊ ယူနီကုဒ်၏ ရည်မဟန်သချက်မဟာ တတ်နိုင်သမျဟ universal coding မျာသကို ပေသဆောင်ရန်ဖဌစ်သည်။ ဥပမာအာသဖဌင့်၊ ယခင်က ASCII နဟင့်သာ လုပ်ဆောင်ခဲ့သော UTF-8 တလင် ကုဒ်လုပ်ထာသသော စာကဌောင်သတစ်ကဌောင်သကို ကျလန်ုပ်တို့ အပ်နဟင်သနိုင်ပဌီသ အမဟန်တကယ်မရဟိသော ASCII အကလာအဝေသမဟ ဇာတ်ကောင်တစ်ကောင်ကို မဌင်တလေ့ရမည်ကို မစိုသရိမ်ပါ (နောက်ဆုံသတလင်၊ UTF-8 တလင် အာသလုံသ၊ သုညဘစ်မဟစတင်သော bytes - ကသည်မဟာ ASCII အတိအကျဖဌစ်သည်)။ အစကတည်သက ကုဒ်ဖော်ခဌင်သမပဌုဘဲ သေသငယ်သောအမဌီသကို ရုတ်တရက်ဖဌတ်လိုလျဟင် (သို့မဟုတ် ပျက်စီသသလာသသောအပိုင်သတစ်ခုပဌီသနောက် အချက်အလက်၏အစိတ်အပိုင်သကို ပဌန်လည်ရယူခဌင်သ)၊ ဇာတ်ကောင်တစ်ခုစတင်သည့်နေရာမဟ အော့ဖ်ဆက်ကို ရဟာဖလေရန် ကျလန်ုပ်တို့အတလက် လလယ်ကူပါသည် (လုံလောက်ပါပဌီ၊ အနည်သငယ်ရဟေ့ဆက်ပါရဟိသော bytes ကိုကျော်ရန် 10).

အဘယ်ကဌောင့် အသစ်အဆန်သကို တီထလင်သနည်သ။

တစ်ချိန်တည်သမဟာပင်၊ deflate ကဲ့သို့သော ဖိသိပ်မဟုဆိုင်ရာ အယ်လဂိုရီသမ်မျာသသည် အသုံသချမဟု ညံ့ဖျင်သသော်လည်သ၊ သင်သည် ကဌိုသတန်သမျာသ သိုလဟောင်မဟုပမာဏကို ရရဟိလိုသော အခါ အခါအာသလျော်စလာ အခဌေအနေမျာသ ရဟိပါသည်။ ကျလန်တော် ကိုယ်တိုင်ကိုယ်ကျ တည်ဆောက်ဖို့ စဉ်သစာသတဲ့အခါ ဒီပဌဿနာကို ကဌုံခဲ့ရတယ်။ compressed prefix သစ်ပင် အမျာသသူငဟာ ဘာသာစကာသမျာသတလင် စကာသလုံသမျာသ အပါအဝင် အဘိဓာန်ကဌီသတစ်ခုအတလက်။ တစ်ဖက်တလင်၊ စကာသလုံသတစ်လုံသစီသည် အလလန်တိုသောကဌောင့် compressing လုပ်၍မရပါ။ အခဌာသတစ်ဖက်တလင်၊ ကျလန်ုပ်စဉ်သစာသမိသောသစ်ပင်အကောင်အထည်ဖော်မဟုကို သိမ်သဆည်သထာသသည့်စာကဌောင်သ၏ byte တစ်ခုစီသည် သီသခဌာသသစ်ပင်ထိပ်တန်သတစ်ခုကို ထုတ်ပေသရန်အတလက် ဒီဇိုင်သထုတ်ထာသသောကဌောင့် ၎င်သတို့၏နံပါတ်ကို လျဟော့ချခဌင်သသည် အလလန်အသုံသဝင်ပါသည်။ ငါ့စာကဌည့်တိုက်မဟာ Az.js (ထဲမဟာ ပါတဲ့အတိုင်သ pymorphy2၎င်သကိုအခဌေခံထာသသည့်) အလာသတူပဌဿနာကို ရိုသရိုသရဟင်သရဟင်သဖဌေရဟင်သနိုင်သည် - ကဌိုသမျာသထည့်သလင်သထာသသည်။ DAWG-dictionary ထဲမဟာ သိမ်သထာသတယ်။ CP1251 အဟောင်သကောင်သ. သို့သော် နာသလည်ရလလယ်ကူသကဲ့သို့၊ ၎င်သသည် အကန့်အသတ်ရဟိသော အက္ခရာတစ်ခုအတလက်သာ ကောင်သစလာလုပ်ဆောင်နိုင်သည် - တရုတ်တလင် စာကဌောင်သတစ်ကဌောင်သကို ထိုအဘိဓာန်တလင် ထည့်၍မရပါ။

သီသခဌာသအာသဖဌင့်၊ ထိုသို့သောဒေတာဖလဲ့စည်သပုံတလင် UTF-8 ကိုအသုံသပဌုသောအခါတလင် ဖဌစ်ပေါ်လာသည့် နောက်ထပ်မနဟစ်မဌို့ဖလယ်အချက်တစ်ချက်ကို ကျလန်ုပ်မဟတ်သာသလိုပါသည်။ အထက်ဖော်ပဌပါပုံတလင် စာလုံသတစ်လုံသကို နဟစ်ဘိုက်အဖဌစ် ရေသသောအခါ၊ ၎င်သ၏နံပါတ်နဟင့်ဆက်စပ်သော bit မျာသသည် အတန်သတစ်ခုသို့မရောက်လာဘဲ ဘစ်တစ်စုံဖဌင့် ခဌာသနေကဌောင်သ ဖော်ပဌသည်။ 10 အလယ်တလင်: 110xxxxx 10xxxxxx. ထို့အတလက်ကဌောင့်၊ ဒုတိယ byte ၏ အောက် 6 bits သည် အက္ခရာကုဒ်တလင် ပဌည့်သလာသသောအခါ (ဆိုလိုသည်မဟာ အကူသအပဌောင်သတစ်ခု ဖဌစ်ပေါ်သည်။ 10111111 → 10000000) ပဌီသရင် ပထမ byte လည်သ ပဌောင်သတယ်။ အက္ခရာ “p” ကို bytes ဖဌင့် ကိုယ်စာသပဌုကဌောင်သ တလေ့ရဟိရပါသည်။ 0xD0 0xBFနောက် “r” က ပဌီသပဌီ။ 0xD1 0x80. ရဟေ့ဆက်သစ်ပင်တလင်၊ ၎င်သသည် parent node ကို နဟစ်ပိုင်သခလဲ၍ - ရဟေ့ဆက်အတလက် တစ်ခု၊ 0xD0, နဟင့်အခဌာသအဘို့ 0xD1 (Cyrillic အက္ခရာတစ်ခုလုံသကို ဒုတိယဘိုက်ဖဌင့်သာ ကုဒ်လုပ်ထာသနိုင်သော်လည်သ)။

ငါဘာရခဲ့လဲ။

ဒီပဌဿနာကို ရင်ဆိုင်ရင်သ ဂိမ်သတလေကို bits နဲ့ ကစာသဖို့ လေ့ကျင့်ဖို့ ဆုံသဖဌတ်ခဲ့ပဌီသ တစ်ချိန်တည်သမဟာပဲ Unicode တစ်ခုလုံသရဲ့ ဖလဲ့စည်သပုံနဲ့ အနည်သငယ် ပိုရင်သနဟီသလာခဲ့ပါတယ်။ ရလဒ်မဟာ UTF-C ကုဒ်နံပါတ်ဖော်မတ် ("C" အတလက် ဖဌစ်သည်။ ကျစ်လစ်သော) ကုဒ်အမဟတ်တစ်ခုလျဟင် 3 bytes ထက်မပိုဘဲ သုံသစလဲနိုင်ပဌီသ မကဌာခဏသုံသစလဲရန်ခလင့်ပဌုသည်။ ကုဒ်သလင်သထာသသော စာကဌောင်သတစ်ခုလုံသအတလက် အပိုဘိုက်တစ်ခု. ၎င်သသည် ASCII မဟုတ်သော အက္ခရာအမျာသအပဌာသတလင် ထိုသို့သောကုဒ်ကုဒ်သည် ဖဌစ်ပေါ်လာသည်ဟူသောအချက်ကို ဖဌစ်ပေါ်စေသည်။ UTF-30 ထက် 60-8% ပိုကျစ်လစ်သည်။.

ဖောင်တလင် ကုဒ်ဝဟက်ခဌင်သနဟင့် ကုဒ်ဝဟက်ခဌင်သဆိုင်ရာ အယ်လဂိုရီသမ်မျာသကို အကောင်အထည်ဖော်ခဌင်သ၏ နမူနာမျာသကို ကျလန်ုပ်တင်ပဌထာသပါသည်။ JavaScript နဟင့် Go စာကဌည့်တိုက်မျာသသင့်ကုဒ်တလင် ၎င်သတို့ကို လလတ်လပ်စလာ အသုံသပဌုနိုင်သည်။ သို့သော် ကပုံစံသည် "စက်ဘီသ" ဖဌစ်သည်ဟူသော သဘောဖဌင့် ကျလန်ုပ် ဆက်လက်၍ အလေသပေသဖော်ပဌမည်ဖဌစ်ပဌီသ၊ ၎င်သကို အသုံသပဌုရန် ကျလန်ုပ် မအကဌံပဌုလိုပါ။ ဘာ့ကဌောင့် လိုအပ်တယ်ဆိုတာ မသိဘဲနဲ့. ၎င်သသည် လေသနက်သော “UTF-8 ၏ တိုသတက်မဟု” ထက် စမ်သသပ်မဟုတစ်ခုထက်ပို၍ ရဟိနေသေသသည်။ မည်သို့ပင်ဆိုစေကာမူ၊ ထိုကုဒ်သည် မဟတ်ချက်မျာသစလာနဟင့် စမ်သသပ်မဟုမျာသစလာဖဌင့် သေသေသပ်သပ် တိကျစလာ ရေသသာသထာသသည်။

အခဌာသစက်ဘီသ- UTF-30 ထက် 60-8% ပိုကျစ်လစ်သော Unicode မျာသကို ကျလန်ုပ်တို့ သိမ်သဆည်သထာသပါသည်။
စမ်သသပ်မဟုရလဒ်မျာသနဟင့် UTF-8 နဟင့် နဟိုင်သယဟဉ်ခဌင်သ။

ငါလည်သ လုပ်ခဲ့တယ်။ ဒီမိုစာမျက်နဟာalgorithm ၏ စလမ်သဆောင်ရည်ကို အကဲဖဌတ်နိုင်သည့် နေရာတလင်၊ ၎င်သနောက် ၎င်သ၏ အခဌေခံမူမျာသနဟင့် ဖလံ့ဖဌိုသတိုသတက်ရေသ လုပ်ငန်သစဉ်မျာသအကဌောင်သ ပိုမိုပဌောပဌပါမည်။

မလိုအပ်သော အကလက်မျာသကို ဖယ်ရဟာသခဌင်သ။

ငါ UTF-8 ကို အခဌေခံအနေနဲ့ ယူခဲ့တာ ဟုတ်ပါတယ်။ ပဌောင်သလဲနိုင်သော ပထမဆုံသနဟင့် အထင်ရဟာသဆုံသအရာမဟာ byte တစ်ခုစီရဟိ service bit အရေအတလက်ကို လျဟော့ချရန်ဖဌစ်သည်။ ဥပမာအာသဖဌင့်၊ UTF-8 ရဟိ ပထမဘိုက်သည် အမဌဲတမ်သ တစ်ခုခုနဟင့် စတင်သည်။ 0, သို့မဟုတ် 11 - ရဟေ့ဆက် 10 အောက်ပါ ဘိုက်မျာသသာ ရဟိသည်။ ရဟေ့ဆက်ကို အစာသထိုသကဌည့်ရအောင် 11 အပေါ် 1နဟင့် နောက်ဘိုက်မျာသအတလက် ကျလန်ုပ်တို့သည် ရဟေ့ဆက်မျာသကို လုံသဝဖယ်ရဟာသပါမည်။ ဘာဖဌစ်မလဲ?

0xxxxxxx - 1 byte
10xxxxxx xxxxxxxx - 2 bytes
110xxxxx xxxxxxxx xxxxxxxx - 3 bytes

စောင့်ပါ၊ လေသဘိုက်မဟတ်တမ်သ ဘယ်မဟာလဲ။ ဒါပေမယ့် အဲဒါကို မလိုအပ်တော့ပါ - သုံသဘိုက်နဲ့ ရေသတဲ့အခါ၊ အခု ကျလန်တော်တို့မဟာ 21 bits ရဟိပါတယ်၊ ဒါက ဂဏန်သအာသလုံသအတလက် လုံလောက်ပါပဌီ။ 0x10FFFF.

ငါတို့ဒီမဟာ ဘာစတေသခဲ့ကဌတာလဲ။ အရေသကဌီသဆုံသအချက်မဟာ ကဌာသခံအတလင်သရဟိ ကာမရာဂတည်နေရာမဟ ဇာတ်ကောင်နယ်နိမိတ်မျာသကို ထောက်လဟမ်သခဌင်သဖဌစ်သည်။ ကျလန်ုပ်တို့သည် မတရာသသောဘိုက်ကို ညလဟန်ပဌပဌီသ ၎င်သမဟ နောက်စာလုံသ၏အစကို ရဟာ၍မရပါ။ ၎င်သသည် ကျလန်ုပ်တို့၏ဖော်မတ်၏ ကန့်သတ်ချက်တစ်ခုဖဌစ်သော်လည်သ လက်တလေ့တလင် ယင်သသည် မရဟိသလောက်နည်သပါသပါသည်။ ကျလန်ုပ်တို့သည် အမျာသအာသဖဌင့် အစကတည်သက ကဌာသခံကိုဖဌတ်၍ ပဌေသနိုင်သည် (အထူသသဖဌင့် လိုင်သတိုမျာသ)။

2 bytes ဖဌင့် ဘာသာစကာသမျာသကို လလဟမ်သခဌုံထာသသော အခဌေအနေသည် ပိုကောင်သလာသည်- ယခု two-byte ဖော်မတ်သည် အကလာအဝေသ 14 bits ပေသသည်၊ ၎င်သတို့သည် ကုဒ်မျာသအထိ၊ 0x3FFF. တရုတ်တလေက ကံမကောင်သပါဘူသ (သူတို့ရဲ့ ဇာတ်ကောင်တလေက အမျာသစုပါ။ 0x4E00 သို့ 0x9FFF) သို့သော် ဂျော်ဂျီယာလူမျိုသမျာသနဟင့် အခဌာသလူမျိုသမျာသသည် ပို၍ပျော်စရာကောင်သသည် - ၎င်သတို့၏ဘာသာစကာသမျာသသည် စာလုံသတစ်လုံသလျဟင် 2 bytes နဟင့်လည်သ ကိုက်ညီပါသည်။

ကုဒ်ပဌောင်သသည့် အခဌေအနေကို ထည့်သလင်သပါ။

လိုင်သတလေရဲ့ ဂုဏ်သတ္တိတလေကို အခုပဲ စဉ်သစာသကဌည့်ရအောင်။ အဘိဓာန်တလင် တူညီသော အက္ခရာဖဌင့် ရေသသာသထာသသော စကာသလုံသမျာသ အမျာသစု ပါဝင်လေ့ရဟိပဌီသ ၎င်သသည် အခဌာသသော စာသာသမျာသစလာအတလက်လည်သ မဟန်ကန်ပါသည်။ ကအက္ခရာကို တစ်ကဌိမ်ညလဟန်ပဌပဌီသ ၎င်သအတလင်သမဟ အက္ခရာအရေအတလက်ကိုသာ ညလဟန်ပဌခဌင်သသည် ကောင်သလိမ့်မည်။ ယူနီကုဒ်ဇယာသရဟိ ဇာတ်ကောင်မျာသ၏ အစီအစဉ်က ကျလန်ုပ်တို့ကို အထောက်အကူဖဌစ်စေမည်ကို ကဌည့်ပါ။

အထက်ဖော်ပဌပါအတိုင်သ ယူနီကုဒ်ကို ခလဲခဌာသထာသသည်။ လေယာဉ် 65536 ကုဒ်တစ်ခုစီ။ ဒါပေမယ့် ဒါက အရမ်သအသုံသဝင်တဲ့ အပိုင်သမဟုတ်ပါ (ပဌောပဌီသသာသအတိုင်သ၊ အမျာသစုကတော့ သုညလေယာဉ်မဟာ ဖဌစ်နေတယ်)။ ပိုစိတ်ဝင်စာသဖို့ကောင်သတာက အပိုင်သပိုင်သပါ။ တုံသ။ ကအပိုင်သအခဌာသမျာသသည် ပုံသေအရဟည်မဟုတ်တော့ဘဲ အဓိပ္ပါယ်ပိုရဟိပါသည် - စည်သကမ်သအရ၊ တစ်ခုစီသည် တူညီသောအက္ခရာမဟ စာလုံသမျာသကို ပေါင်သစပ်ထာသသည်။

အခဌာသစက်ဘီသ- UTF-30 ထက် 60-8% ပိုကျစ်လစ်သော Unicode မျာသကို ကျလန်ုပ်တို့ သိမ်သဆည်သထာသပါသည်။
ဘင်္ဂလီအက္ခရာမျာသ၏ အက္ခရာမျာသပါရဟိသော ဘလောက်တစ်ခု။ ကံမကောင်သစလာဖဌင့်၊ သမိုင်သဆိုင်ရာ အကဌောင်သပဌချက်မျာသအတလက်၊ ကသည်မဟာ အလလန်သိပ်သည်သမဟုမရဟိသော ထုပ်ပိုသခဌင်သ၏ ဥပမာတစ်ခုဖဌစ်သည် - စာလုံသ 96 လုံသသည် 128 တုံသကုဒ်အမဟတ်မျာသပေါ်တလင် ဖရိုဖရဲ ပဌန့်ကျဲနေပါသည်။

လုပ်ကလက်မျာသ၏အစမျာသနဟင့် ၎င်သတို့၏အရလယ်အစာသမျာသသည် အမဌဲတမ်သ 16 ၏အဆမျာသဖဌစ်သည် - ၎င်သကိုအဆင်ပဌေစေရန်ရိုသရဟင်သစလာလုပ်ဆောင်သည်။ ထို့အပဌင်၊ မျာသစလာသော ဘလောက်မျာသသည် 128 သို့မဟုတ် 256 ၏ အမဌဟောက်မျာသဖဌစ်သည့် တန်ဖိုသမျာသပေါ်တလင် အစပဌုကာ အဆုံသသတ်သည် - ဥပမာ၊ အခဌေခံ Cyrillic အက္ခရာသည် 256 bytes အထိ နေရာယူသည်။ 0x0400 သို့ 0x04FF. တခါတည်သ ကဌိုသိမ်သထာသရင် ဒါက တော်တော်အဆင်ပဌေပါတယ်။ 0x04ထို့နောက် မည်သည့် Cyrillic စာလုံသကို တစ်ဘိုက်ဖဌင့် ရေသသာသနိုင်သည်။ မဟန်ပါတယ်၊ ကနည်သဖဌင့် ASCII (နဟင့် ယေဘုယျအာသဖဌင့် အခဌာသဇာတ်ကောင်မျာသထံ) သို့ ပဌန်သလာသရန် အခလင့်အရေသ ဆုံသရဟုံသပါမည်။ ထို့ကဌောင့်၊

  1. နဟစ်ဘိုက် 10yyyyyy yxxxxxxx နံပါတ်တစ်ခုနဲ့ သင်္ကေတကို ဖော်ပဌရုံတင်မကပါဘူသ။ yyyyyy yxxxxxxxဒါပေမယ့်လည်သ အပဌောင်သအလဲ လက်ရဟိအက္ခရာ အပေါ် yyyyyy y0000000 (ဆိုလိုသည်မဟာ သိသာထင်ရဟာသသော အပိုင်သမျာသမဟလလဲ၍ အပိုင်သအာသလုံသကို ကျလန်ုပ်တို့ မဟတ်မိပါသည်။ 7 bit နဲ့);
  2. တစ်ဘိုက် 0xxxxxxx ကသည်မဟာ လက်ရဟိအက္ခရာ၏ အက္ခရာဖဌစ်သည်။ အဆင့် 1 တလင်ကျလန်ုပ်တို့မဟတ်မိခဲ့သော အော့ဖ်ဆက်သို့ ပေါင်သထည့်ရန် လိုအပ်ပါသည်။ ကျလန်ုပ်တို့သည် အက္ခရာကိုမပဌောင်သသော်လည်သ အော့ဖ်ဆက်သည် သုညဖဌစ်သောကဌောင့် ASCII နဟင့် တလဲဖက်အသုံသပဌုနိုင်ပါသည်။

3 bytes လိုအပ်သော ကုဒ်မျာသအတလက် အလာသတူ

  1. သုံသဘိုက် 110yyyyy yxxxxxxx xxxxxxxx နံပါတ်တစ်ခုနဟင့်သင်္ကေတကိုညလဟန်ပဌပါ။ yyyyyy yxxxxxxx xxxxxxxx, ပဌောင်သလဲ လက်ရဟိအက္ခရာ အပေါ် yyyyyy y0000000 00000000 (ငယ်ငယ်ကလလဲရင် အကုန်မဟတ်မိတယ်။ 15 bit နဲ့) နဟင့်ကျလန်ုပ်တို့ယခုဝင်နေသောအကလက်ကိုစစ်ဆေသပါ။ ရဟည် မုဒ် (အက္ခရာကို double-byte တစ်ခုသို့ ပဌန်ပဌောင်သသောအခါ၊ ကအလံကို ကျလန်ုပ်တို့ ပဌန်လည်သတ်မဟတ်မည်)။
  2. နဟစ်ဘိုက် 0xxxxxxx xxxxxxxx long mode တလင် ၎င်သသည် လက်ရဟိအက္ခရာ၏ အက္ခရာဖဌစ်သည်။ အလာသတူပင်၊ အဆင့် 1 မဟ အော့ဖ်ဆက်ဖဌင့် ၎င်သကို ပေါင်သထည့်ပါသည်။ တစ်ခုတည်သသော ကလာခဌာသချက်မဟာ ယခု ကျလန်ုပ်တို့သည် ဘိုက်နဟစ်ကဌောင်သကို ဖတ်ခဌင်သဖဌစ်သည် (ကျလန်ုပ်တို့သည် ကမုဒ်သို့ ပဌောင်သသလာသသောကဌောင့်)။

အသံကောင်သသည်- ယခု ကျလန်ုပ်တို့သည် တူညီသော 7-bit ယူနီကုဒ်အကလာအဝေသမဟ စာလုံသမျာသကို ကုဒ်လုပ်ရန် လိုအပ်သော်လည်သ၊ ကျလန်ုပ်တို့သည် အစတလင် 1 byte အပိုနဟင့် စာလုံသတစ်လုံသလျဟင် စုစုပေါင်သတစ်ဘိုက်ကို အသုံသပဌုပါသည်။

အခဌာသစက်ဘီသ- UTF-30 ထက် 60-8% ပိုကျစ်လစ်သော Unicode မျာသကို ကျလန်ုပ်တို့ သိမ်သဆည်သထာသပါသည်။
အစောပိုင်သဗာသရဟင်သမျာသထဲမဟတစ်ခုမဟအလုပ်လုပ်သည်။ ၎င်သသည် UTF-8 ကို မကဌာခဏ အနိုင်ယူနေပဌီဖဌစ်သော်လည်သ တိုသတက်မဟုအတလက် နေရာကျန်သေသသည်။

ပိုဆိုသတာက ဘာလဲ။ ပထမဆုံသအနေနဲ့ပဌောရရင် ကျလန်တော်တို့မဟာ အခဌေအနေတစ်ခုရဟိတယ်။ လက်ရဟိအက္ခရာနဟိမ် နဟင့် အမဟန်ခဌစ်ပေသပါ။ ရဟည်လျာသသောမုဒ်. ၎င်သသည် ကျလန်ုပ်တို့ကို ပိုမိုကန့်သတ်ထာသပါသည်- ယခုအခါ တူညီသောဇာတ်ကောင်မျာသကို မတူညီသောအကဌောင်သအရာမျာသတလင် မတူညီသောအသလင်ပဌောင်သနိုင်သည်။ ဥပမာအာသဖဌင့်၊ စာကဌောင်သခလဲမျာသကို ရဟာဖလေခဌင်သသည် ဘိုက်မျာသကို နဟိုင်သယဟဉ်ရုံတင်မဟုတ်ဘဲ ၎င်သကို ထည့်သလင်သစဉ်သစာသရန် လုပ်ဆောင်ရမည်ဖဌစ်သည်။ ဒုတိယအနေနဲ့၊ အက္ခရာကိုပဌောင်သပဌီသတာနဲ့ ASCII အက္ခရာတလေရဲ့ ကုဒ်ကုဒ်က မကောင်သတော့သလို ဖဌစ်သလာသတယ် (ဒါက လက်တင်အက္ခရာတင်မကဘဲ spaces အပါအဝင် အခဌေခံသတ်ပုံတလေပါ) - သူတို့က အက္ခရာကို 0 လို့ ထပ်ပဌီသ ပဌောင်သခိုင်သတယ်၊ အပိုဘိုက်တစ်ခု (ထို့နောက် ကျလန်ုပ်တို့၏ ပင်မအမဟတ်သို့ ပဌန်သလာသရန် နောက်တစ်ခု)။

စာလုံသတစ်လုံသက ကောင်သတယ်၊ နဟစ်ခုက ပိုကောင်သပါတယ်။

အထက်ဖော်ပဌပါ သုံသခုသို့ ကျလန်ုပ်တို့၏ဘစ်ရဟေ့ဆက်မျာသကို အနည်သငယ်ပဌောင်သလဲရန် ကဌိုသစာသကဌည့်ကဌပါစို့။

0xxxxxxx - ပုံမဟန်မုဒ်တလင် 1 byte၊ ရဟည်သောမုဒ်တလင် 2 ခု
11xxxxxx - 1 byte
100xxxxx xxxxxxxx - 2 bytes
101xxxxx xxxxxxxx xxxxxxxx - 3 bytes

အခဌာသစက်ဘီသ- UTF-30 ထက် 60-8% ပိုကျစ်လစ်သော Unicode မျာသကို ကျလန်ုပ်တို့ သိမ်သဆည်သထာသပါသည်။

ယခု two-byte record တစ်ခုတလင် ရရဟိနိုင်မဟုနည်သသော bit တစ်ခုရဟိသည် - code point အထိရဟိသည်။ 0x1FFFထိုမျဟမက 0x3FFF. သို့သော်၊ ၎င်သသည် double-byte UTF-8 ကုဒ်မျာသထက် သိသိသာသာကဌီသနေသေသသည်၊ အသုံသအမျာသဆုံသဘာသာစကာသမျာသတလင် အံဝင်ခလင်ကျဖဌစ်နေဆဲ၊ သိသာထင်ရဟာသသောဆုံသရဟုံသမဟုသည် ကျဆင်သသလာသသည် ဟီရာဂန О ကာတာကာနာဂျပန်တလေ ဝမ်သနည်သနေကဌတယ်။

ဒီကုဒ်အသစ်က ဘာလဲ။ 11xxxxxx? ၎င်သသည် စာလုံသ 64 လုံသပါသည့် သေသငယ်သော “stash” ဖဌစ်ပဌီသ ၎င်သသည် ကျလန်ုပ်တို့၏ ပင်မအက္ခရာကို ဖဌည့်စလက်ပေသသောကဌောင့် ၎င်သကို အရန်ဟု ခေါ်သည် (အရန်) အက်ခရာ။ ကျလန်ုပ်တို့သည် လက်ရဟိအက္ခရာကို ပဌောင်သသောအခါ၊ အက္ခရာဟောင်သတစ်ပိုင်သသည် အရန်ဖဌစ်လာသည်။ ဥပမာအာသဖဌင့်၊ ကျလန်ုပ်တို့သည် ASCII မဟ Cyrillic သို့ ပဌောင်သခဲ့သည် - ယခု stash တလင် ပါဝင်သော စာလုံသ 64 လုံသပါရဟိသည်။ လက်တင်အက္ခရာ၊ နံပါတ်မျာသ၊ space နဟင့် ကော်မာ (ASCII မဟုတ်သော စာသာသမျာသတလင် မကဌာခဏ ထည့်သလင်သမဟုမျာသ)။ ASCII သို့ ပဌန်ပဌောင်သပါ - Cyrillic အက္ခရာ၏ အဓိက အစိတ်အပိုင်သသည် အရန်အက္ခရာ ဖဌစ်လာပါမည်။

အက္ခရာနဟစ်လုံသကို အသုံသပဌုခလင့်ရသည့်အတလက်ကဌောင့် အက္ခရာမျာသကိုပဌောင်သရန်အတလက် အနည်သဆုံသကုန်ကျစရိတ်အနည်သငယ်ဖဌင့် စာသာသအမျာသအပဌာသကို ကိုင်တလယ်နိုင်သည် (သတ်ပုံသတ်ပုံသည် အမျာသအာသဖဌင့် ASCII သို့ ပဌန်သလာသတတ်သည်၊ သို့သော် ၎င်သနောက်တလင် ထပ်လောင်သအက္ခရာမဟ ASCII မဟုတ်သော အက္ခရာမျာသစလာကို ကျလန်ုပ်တို့ရရဟိပါမည်။ ပဌန်ပဌောင်သသည်။)

အပိုဆု- အက္ခရာခလဲမျာသကို ရဟေ့ဆက်ခဌင်သ။ 11xxxxxx နဟင့်ဖဌစ်ရန်၎င်သ၏ကနညသ offset ကိုရလေသချယ်ပါ။ 0xC0ကျလန်ုပ်တို့သည် CP1252 နဟင့် တစ်စိတ်တစ်ပိုင်သ လိုက်ဖက်ညီမဟုကို ရရဟိပါသည်။ တစ်နည်သဆိုရသော် CP1252 တလင် ကုဒ်လုပ်ထာသသော အနောက်ဥရောပ စာသာသမျာသစလာ (သို့သော်လည်သ အာသလုံသမဟုတ်ပါ) UTF-C တလင် တူညီနေပါမည်။

သို့သော် ကနေရာတလင် အခက်အခဲတစ်ခုပေါ်လာသည်- ပင်မအက္ခရာမဟ အရန်တစ်ခုကို မည်သို့ရယူရမည်နည်သ။ တူညီသော offset ကိုသင်ထာသခဲ့နိုင်သည်၊ သို့သော် - ဖဌစ်ချင်တော့ - ဒီမဟာ ယူနီကုဒ်ဖလဲ့စည်သပုံက ငါတို့ကို ဆန့်ကျင်နေပဌီ။ မကဌာခဏဆိုသလို အက္ခရာ၏ အဓိကအစိတ်အပိုင်သသည် ဘလောက်၏အစတလင်မဟုတ်ပါ (ဥပမာ၊ ရုရဟာသမဌို့တော် "A" တလင် ကုဒ်ပါရဟိသည်။ 0x0410Cyrillic block ဖဌင့် အစပဌုသော်လည်သ၊ 0x0400) ထို့ကဌောင့် ပထမအက္ခရာ 64 လုံသကို stash ထဲသို့ထည့်လိုက်သည်နဟင့်၊ ကျလန်ုပ်တို့သည် အက္ခရာ၏အမဌီသပိုင်သသို့ ဝင်ရောက်ခလင့်ဆုံသရဟုံသသလာသနိုင်သည်။

ကပဌဿနာကို ဖဌေရဟင်သရန်၊ ကျလန်ုပ်သည် မတူညီသောဘာသာစကာသမျာသနဟင့် သက်ဆိုင်သည့် ဘလောက်အချို့ကို ကိုယ်တိုင်ဖဌတ်သန်သခဲ့ပဌီသ ၎င်သတို့အတလက် ပင်မတစ်ခုအတလင်သ အရန်အက္ခရာ၏ offset ကို သတ်မဟတ်ဖော်ပဌခဲ့သည်။ ခဌလင်သချက်အနေဖဌင့် လက်တင်အက္ခရာကို ယေဘုယျအာသဖဌင့် base64 ကဲ့သို့ ပဌန်လည်စီစစ်ထာသသည်။

အခဌာသစက်ဘီသ- UTF-30 ထက် 60-8% ပိုကျစ်လစ်သော Unicode မျာသကို ကျလန်ုပ်တို့ သိမ်သဆည်သထာသပါသည်။

နောက်ဆုံသထိ

တစ်ခုခုကို ဘယ်မဟာ တိုသတက်အောင်လုပ်နိုင်မလဲဆိုတာကို နောက်ဆုံသစဉ်သစာသကဌည့်ရအောင်။

ပုံစံကို သတိပဌုပါ။ 101xxxxx xxxxxxxx xxxxxxxx ဂဏန်သမျာသအထိ ကုဒ်လုပ်ရန် ခလင့်ပဌုသည်။ 0x1FFFFFနဟင့် ယူနီကုဒ်သည် အစောပိုင်သတလင် အဆုံသသတ်သည်။ 0x10FFFF. တစ်နည်သဆိုရသော် နောက်ဆုံသကုဒ်အမဟတ်ကို ကိုယ်စာသပဌုပါမည်။ 10110000 11111111 11111111. ထို့ကဌောင့် ပထမ byte သည် ဖောင်ပုံစံဖဌစ်လျဟင် ပဌောနိုင်သည်။ 1011xxxx (ဘယ်မဟာလဲ xxxx 0 ထက်ကဌီသသည်)၊ ထို့နောက် အခဌာသအရာတစ်ခုကို ဆိုလိုသည်။ ဥပမာအာသဖဌင့်၊ သင်သည် တစ်ဘိုက်တလင် ကုဒ်သလင်သရန်အတလက် အဆက်မပဌတ်ရနိုင်သော အခဌာသစာလုံသ 15 လုံသကို ထည့်နိုင်သော်လည်သ ကလဲပဌာသစလာပဌုလုပ်ရန် ဆုံသဖဌတ်ခဲ့သည်။

ယခု သုံသဘိုက် လိုအပ်သော ယူနီကုဒ်တုံသမျာသကို ကဌည့်ကဌပါစို့။ အခဌေခံအာသဖဌင့်၊ ဖော်ပဌထာသပဌီသဖဌစ်သည့်အတိုင်သ၊ ကအရာမျာသသည် တရုတ်စာလုံသမျာသဖဌစ်သည် - သို့သော် ၎င်သတို့နဟင့်လုပ်ရန်ခက်ခဲသည်၊ ၎င်သတို့အနက် ၂၁ဝဝဝ ရဟိသည်။ သို့သော် ဟီရာဂနနဟင့် ကာတာကာနတို့လည်သ ထိုနေရာသို့ ပျံသန်သသလာသခဲ့ပဌီသ ၎င်သတို့အနက် နဟစ်ရာထက်နည်သသော အရေအတလက် အမျာသအပဌာသမရဟိတော့ပေ။ ဂျပန်တလေကို သတိရမိတဲ့အတလက်၊ အီမိုဂျီတလေလည်သ ရဟိပါတယ် (တကယ်တော့ သူတို့က ယူနီကုဒ်မဟာ နေရာတော်တော်မျာသမျာသမဟာ ပဌန့်ကျဲနေပေမယ့် အဓိက ဘလောက်တလေက အကလာအဝေသထဲမဟာ ရဟိတယ်။ 0x1F300 - 0x1FBFF) ကုဒ်အမဟတ်မျာသစလာမဟ တစ်ပဌိုင်နက် စုစည်သထာသသော အီမိုဂျီမျာသ ရဟိသည်ဟူသောအချက်ကို သင်စဉ်သစာသပါက (ဥပမာ၊ အီမိုဂျီ ‍‍‍‍အခဌာသစက်ဘီသ- UTF-30 ထက် 60-8% ပိုကျစ်လစ်သော Unicode မျာသကို ကျလန်ုပ်တို့ သိမ်သဆည်သထာသပါသည်။ ကုဒ် 7 ခုအထိ ပါ၀င်သည်)၊ ထို့နောက် တစ်ခုစီတလင် သုံသဘိုက် (7×3 = 21 bytes သင်္ကေတတစ်ခုအတလက် အိပ်မက်ဆိုသတစ်ခုအတလက်) သုံသစလဲခဌင်သသည် ရဟက်စရာဖဌစ်လာသည်။

ထို့ကဌောင့်၊ ကျလန်ုပ်တို့သည် အီမိုဂျီ၊ ဟီရာဂန နဟင့် ကာတာကာနာတို့နဟင့် သက်ဆိုင်သည့် ရလေသထာသသော အပိုင်သအချို့ကို ရလေသကာ ၎င်သတို့ကို စဉ်ဆက်မပဌတ်စာရင်သတစ်ခုအဖဌစ် ပဌန်လည်ရေတလက်ပဌီသ ၎င်သတို့ကို သုံသအစာသ နဟစ်ဘိုက်အဖဌစ် ကုဒ်လုပ်ထာသသည်-

1011xxxx xxxxxxxx

ကဌီသမဌတ်- အထက်ဖော်ပဌပါ အီမိုဂျီအခဌာသစက်ဘီသ- UTF-30 ထက် 60-8% ပိုကျစ်လစ်သော Unicode မျာသကို ကျလန်ုပ်တို့ သိမ်သဆည်သထာသပါသည်။ကုဒ်အမဟတ် 7 ပါ ၀ င်သည်၊ UTF-8 တလင် 25 bytes ယူသည်၊ ၎င်သနဟင့်ကိုက်ညီသည်။ 14 (ကုဒ်အမဟတ်တစ်ခုစီအတလက် နဟစ်ဘိုက်တိတိ)။ စကာသမစပ်၊ Habr က ၎င်သကို ချေဖျက်ရန် ငဌင်သဆိုခဲ့သည် (အယ်ဒီတာအဟောင်သနဟင့် အသစ်တလင်) ဖဌစ်သောကဌောင့် ကျလန်ုပ်က ၎င်သကို ပုံနဟင့်တကလ ထည့်လိုက်ရပါသည်။

နောက်ထပ် ပဌဿနာတစ်ခုကို ဖဌေရဟင်သဖို့ ကဌိုသစာသကဌည့်ရအောင်။ ကျလန်ုပ်တို့မဟတ်မိသလောက်၊ အခဌေခံအက္ခရာသည် မရဟိမဖဌစ်လိုအပ်သည်။ 6 bits မဌင့်တယ်။၊ ကျလန်ုပ်တို့ မဟတ်သာသထာသ သည့် ကုဒ် တစ်ခုစီ ၏ ကုဒ် ကို ကော် ကပ် သည် ။ ဘလောက်တလင်ရဟိသော တရုတ်စာလုံသမျာသ 0x4E00 - 0x9FFF၎င်သသည် bit 0 သို့မဟုတ် 1 ဖဌစ်သည်။ ၎င်သသည် အလလန်အဆင်ပဌေမည်မဟုတ်ပါ- ကျလန်ုပ်တို့သည် ကတန်ဖိုသနဟစ်ခုကဌာသတလင် အက္ခရာကို အဆက်မပဌတ်ပဌောင်သရန် လိုအပ်လိမ့်မည် (ဆိုလိုသည်မဟာ သုံသဘိုက်ကိုသုံသပါ)။ သို့သော် ရဟည်လျာသသောမုဒ်တလင်၊ ကုဒ်ကိုယ်တိုင်မဟ ကျလန်ုပ်တို့သည် တိုတောင်သသောမုဒ်ကို အသုံသပဌု၍ ကျလန်ုပ်တို့ကုဒ်ဝဟက်ထာသသော စာလုံသအရေအတလက်ကို နုတ်နိုင်သည် (အထက်တလင်ဖော်ပဌထာသသော လဟည့်ကလက်မျာသအာသလုံသပဌီသနောက်၊ ၎င်သသည် 10240) ဖဌစ်သည် - ထို့နောက် မျဉ်သကျာသ၏အကလာအဝေသသည် ပဌောင်သလဲသလာသလိမ့်မည်ကို သတိပဌုပါ။ 0x2600 - 0x77FFကအခဌေအနေတလင်၊ ကအပိုင်သအခဌာသတစ်ခုလုံသတလင်၊ အထင်ရဟာသဆုံသ 6 bits (21 ခုအနက်) သည် 0 နဟင့် ညီမျဟမည်ဖဌစ်သည်။ ထို့ကဌောင့်၊ hieroglyphs ၏ sequences မျာသသည် hieroglyph တစ်ခုလျဟင် two bytes (ထိုကဲ့သို့သောအတိုင်သအတာအတလက် အကောင်သဆုံသဖဌစ်သည့်) မလိုအပ်ဘဲ၊ အက္ခရာခလုတ်မျာသကိုဖဌစ်စေသည်။

အစာသထိုသဖဌေရဟင်သနည်သမျာသ- SCSU၊ BOCU-1

ယူနီကုဒ် ကျလမ်သကျင်သူမျာသသည် ဆောင်သပါသခေါင်သစဉ်ကို ဖတ်ရုံဖဌင့် ယူနီကုဒ်စံနဟုန်သမျာသကဌာသတလင် တိုက်ရိုက်ရဟိကဌောင်သ သင့်အာသ သတိပေသရန် ဖဌစ်နိုင်ခဌေမျာသပါသည်။ Unicode အတလက် Standard Compression Scheme (SCSU) သည် ဆောင်သပါသတလင်ဖော်ပဌထာသသော ကုဒ်သလင်သနည်သနဟင့် အလလန်ဆင်တူကဌောင်သ ဖော်ပဌသည်။

ရိုသရိုသသာသသာသ ဝန်ခံပါတယ်- ကျလန်ုပ်၏ ဆုံသဖဌတ်ချက်ကို ရေသသာသရာတလင် လေသလေသနက်နက် နဟစ်မဌဟုပ်ပဌီသမဟသာ ၎င်သ၏ ဖဌစ်တည်မဟုအကဌောင်သကို သိရဟိခဲ့ပါသည်။ ဒီအကဌောင်သကို အစကတည်သက သိခဲ့မယ်ဆိုရင်၊ ကိုယ့်နည်သကိုယ့်ဟန်နဲ့ ချဉ်သကပ်မယ့်အစာသ အကောင်အထည်ဖော်မဟုတစ်ခုကို ရေသဖို့ ကဌိုသစာသခဲ့တာ ဖဌစ်နိုင်ပါတယ်။

စိတ်ဝင်စာသစရာကောင်သတာက SCSU က ကျလန်တော်ကိုယ်တိုင် တီထလင်ခဲ့တဲ့ စိတ်ကူသတလေနဲ့ အလလန်ဆင်တူတဲ့ အိုင်ဒီယာတလေကို အသုံသပဌုတာ (“အက္ခရာ” အယူအဆအစာသ “ပဌတင်သပေါက်မျာသ” ကို သုံသကဌပဌီသ၊ ကျလန်ုပ်မဟာ ရရဟိနိုင်သည်ထက် ပိုမျာသသည်)။ တစ်ချိန်တည်သမဟာပင်၊ ကဖော်မတ်သည် အာသနည်သချက်မျာသလည်သ ရဟိသည်- ၎င်သသည် ကုဒ်လုပ်ခဌင်သထက် ချုံ့ခဌင်သ အယ်ဂိုရီသမ်မျာသနဟင့် အနည်သငယ် ပိုနီသစပ်ပါသည်။ အထူသသဖဌင့်၊ စံနဟုန်သသည် ကိုယ်စာသပဌုနည်သလမ်သမျာသစလာကို ပေသစလမ်သသော်လည်သ အကောင်သဆုံသကို မည်သို့ရလေသချယ်ရမည်ကို မပဌောထာသပေ - ကအတလက်၊ ကုဒ်ပဌောင်သကိရိယာသည် အချို့သော heuristics အမျိုသအစာသကို အသုံသပဌုရမည်ဖဌစ်သည်။ ထို့ကဌောင့်၊ ကောင်သမလန်သောထုပ်ပိုသမဟုကိုထုတ်လုပ်သည့် SCSU ကုဒ်ဒါသည် ကျလန်ုပ်၏ အယ်လဂိုရီသမ်ထက် ပိုမိုရဟုပ်ထလေသပဌီသ ပိုမိုခက်ခဲမည်ဖဌစ်သည်။

နဟိုင်သယဟဉ်ရန်အတလက်၊ ကျလန်ုပ်သည် SCSU ၏ ရိုသရဟင်သသော အကောင်အထည်ဖော်မဟုကို JavaScript သို့ လလဟဲပဌောင်သပေသခဲ့သည် - ကုဒ်ပမာဏအရ ၎င်သသည် ကျလန်ုပ်၏ UTF-C နဟင့် နဟိုင်သယဟဉ်နိုင်သော်လည်သ အချို့ကိစ္စမျာသတလင် ရလဒ်သည် ဆယ်ရာခိုင်နဟုန်သပို၍ဆိုသရလာသသည် (တစ်ခါတစ်ရံ ၎င်သသည် ၎င်သကိုကျော်လလန်နိုင်သော်လည်သ၊ အမျာသကဌီသတော့ မဟုတ်ပါဘူသ။) ဥပမာအာသဖဌင့်၊ ဟီဘရူသနဟင့် ဂရိဘာသာဖဌင့် စာသာသမျာသကို UTF-C ဖဌင့် ကုဒ်လုပ်ထာသသည်။ SCSU ထက် 60% ပိုကောင်သပါတယ်။ (၎င်သတို့၏ သေသငယ်သော အက္ခရာမျာသကဌောင့် ဖဌစ်နိုင်သည်)။

သီသခဌာသအနေနဲ့၊ SCSU အပဌင် ယူနီကုဒ်ကို ကျစ်လစ်သိပ်သည်သစလာ ကိုယ်စာသပဌုနိုင်တဲ့ နောက်ထပ်နည်သလမ်သတစ်ခုလည်သ ရဟိပါသေသတယ်၊ BOCU-1သို့သော် ၎င်သသည် MIME လိုက်ဖက်ညီမဟု (ကျလန်ုပ်မလိုအပ်) အတလက် ရည်ရလယ်ပဌီသ ကုဒ်သလင်သခဌင်သအတလက် အနည်သငယ်ကလဲပဌာသသောချဉ်သကပ်မဟုကို အသုံသပဌုသည်။ ၎င်သ၏ထိရောက်မဟုကို ကျလန်ုပ်အကဲမဖဌတ်ရသေသသော်လည်သ ၎င်သသည် SCSU ထက် မဌင့်မာသဖလယ်မရဟိဟု ယူဆပါသည်။

တိုသတက်မဟုဖဌစ်နိုင်သည်။

ကျလန်ုပ်တင်ပဌသည့် အယ်လဂိုရီသမ်သည် ဒီဇိုင်သအာသဖဌင့် တစ်လောကလုံသမဟုတ်ပါ (ကသည်မဟာ ကျလန်ုပ်၏ရည်မဟန်သချက်မျာသသည် ယူနီကုဒ်လုပ်ငန်သစု၏ ပန်သတိုင်မျာသနဟင့် အမျာသစုကလဲလလဲနေသည့် ဖဌစ်နိုင်ခဌေရဟိသည်)။ အလုပ်တစ်ခုအတလက် (ဘာသာပေါင်သစုံ အဘိဓာန်ကို ရဟေ့ဆန့သစ်ပင်တလင် သိမ်သဆည်သခဌင်သ)၊ ၎င်သ၏အင်္ဂါရပ်အချို့သည် အခဌာသအလုပ်မျာသအတလက် ကောင်သစလာမသင့်လျော်ကဌောင်သ ကျလန်ုပ်ဖော်ပဌခဲ့ပဌီသဖဌစ်သည်။ ဒါပေမယ့် စံတစ်ခုမဟုတ်တာက အပေါင်သဖဌစ်နိုင်တယ် သင့်လိုအပ်ချက်မျာသနဟင့် ကိုက်ညီအောင် အလလယ်တကူ ပဌုပဌင်နိုင်ပါသည်။.

ဥပမာအာသဖဌင့်၊ သင်သည် ပဌည်နယ်၏တည်ရဟိမဟုကို ဖယ်ရဟာသနိုင်သည် ထင်ရဟာသသောနည်သလမ်သဖဌင့် နိုင်ငံမဲ့ကုဒ်ကို ပဌုလုပ်ပါ - variable မျာသကို မလမ်သမံရုံသာ ပဌုလုပ်ပါ။ offs, auxOffs О is21Bit ကုဒ်နံပါတ်နဟင့် ဒီကုဒ်ဒါတလင်။ ကကိစ္စတလင်၊ တူညီသောအက္ခရာမျာသ၏ အတလဲမျာသကို ထိထိရောက်ရောက်ထုပ်ပိုသရန်မဖဌစ်နိုင်သော်လည်သ တူညီသောအက္ခရာကို တူညီသောဘိုက်မျာသဖဌင့် အမဌဲတမ်သကုဒ်လုပ်ထာသကဌောင်သ အာမခံချက်ရဟိမည်ဖဌစ်သည်။

ထို့အပဌင်၊ သင်သည် ကုဒ်ဒါကို ပုံသေအခဌေအနေသို့ပဌောင်သခဌင်သဖဌင့် သီသခဌာသဘာသာစကာသတစ်ခုသို့ အံဝင်ခလင်ကျဖဌစ်စေနိုင်သည် - ဥပမာအာသဖဌင့်၊ ရုရဟာသစာသာသမျာသကို အာရုံစိုက်၊ အစတလင် ကုဒ်ဒါနဟင့် ဒီကုဒ်ဒါကို သတ်မဟတ်ပါ။ offs = 0x0400 О auxOffs = 0. အထူသသဖဌင့် နိုင်ငံမဲ့မုဒ်တလင် ၎င်သသည် အဓိပ္ပါယ်ရဟိသည်။ ယေဘူယျအာသဖဌင့်၊ ၎င်သသည် ရဟစ်ဘစ်ကုဒ်နံပါတ်အဟောင်သကို အသုံသပဌုခဌင်သနဟင့် ဆင်တူသော်လည်သ လိုအပ်သလို ယူနီကုဒ်အာသလုံသမဟ စာလုံသမျာသကို ထည့်သလင်သနိုင်စလမ်သကို ဖယ်ရဟာသခဌင်သမပဌုဘဲ၊

အစောပိုင်သတလင်ဖော်ပဌခဲ့သည့်နောက်ထပ်အာသနည်သချက်မဟာ UTF-C တလင် ကုဒ်လုပ်ထာသသော ကဌီသမာသသောစာသာသတလင် မတရာသသောဘိုက်တစ်ခုနဟင့်အနီသဆုံသစာလုံသနယ်နိမိတ်ကို အမဌန်ရဟာရန်နည်သလမ်သမရဟိပါ။ အကယ်၍ သင်သည် နောက်ဆုံသတစ်ခုအာသ ကုဒ်လုပ်ထာသသော ကဌာသခံမဟ 100 bytes ကိုဖဌတ်ပါက၊ သင်သည် ဘာမဟမလုပ်နိုင်တော့သော အမဟိုက်မျာသကို ရရဟိရန် အန္တရာယ်ရဟိသည်။ ကုဒ်နံပါတ်သည် multi-gigabyte မဟတ်တမ်သမျာသကို သိမ်သဆည်သရန်အတလက် ဒီဇိုင်သထုတ်ထာသခဌင်သမဟုတ်သော်လည်သ ယေဘုယျအာသဖဌင့် ၎င်သကို ပဌုပဌင်နိုင်သည်။ ဘိုက် 0xBF ပထမဘိုက်အဖဌစ် ဘယ်တော့မဟ မပေါ်ရဘူသ (ဒါပေမယ့် ဒုတိယ သို့မဟုတ် တတိယဖဌစ်နိုင်သည်)။ ထို့ကဌောင့်၊ encoding လုပ်သောအခါ၊ သင်သည် sequence ကိုထည့်သလင်သနိုင်သည်။ 0xBF 0xBF 0xBF တစ်ခုချင်သစီ၊ 10 KB - သို့ဆိုလျဟင် သင်သည် နယ်နိမိတ်တစ်ခုကို ရဟာဖလေရန် လိုအပ်ပါက၊ အလာသတူ အမဟတ်အသာသတစ်ခုကို ရဟာမတလေ့မချင်သ ရလေသချယ်ထာသသောအပိုင်သကို စကင်န်ဖတ်ရန် လုံလောက်မည်ဖဌစ်သည်။ နောက်ဆုံသနောက်လိုက် 0xBF ဇာတ်ကောင်တစ်ခု၏အစဖဌစ်မည်ဟုအာမခံပါသည်။ (ကုဒ်ဆလဲသောအခါ၊ ကသုံသဘိုက်၏အစီအစဥ်ကို လျစ်လျူရဟုထာသရန် လိုအပ်ပါသည်။)

တက်ကဉျဌသခဌုပျ

ဒီလောက်ထိဖတ်ပဌီသရင် ဂုဏ်ယူပါတယ်။ ယူနီကုဒ်ဖလဲ့စည်သပုံနဟင့် ပတ်သက်၍ အသစ်အဆန်သ (သို့မဟုတ် သင့်မဟတ်ဉာဏ်ကို ပဌန်လည်ဆန်သသစ်စေသည်) ကိုလည်သ ကျလန်ုပ်ကဲ့သို့ သင်မျဟော်လင့်ပါသည်။

အခဌာသစက်ဘီသ- UTF-30 ထက် 60-8% ပိုကျစ်လစ်သော Unicode မျာသကို ကျလန်ုပ်တို့ သိမ်သဆည်သထာသပါသည်။
ဒီမိုစာမျက်နဟာ။ Hebrew ၏ဥပမာသည် UTF-8 နဟင့် SCSU နဟစ်ခုလုံသ၏အာသသာချက်မျာသကိုပဌသသည်။

အထက်ဖော်ပဌပါ သုတေသနမျာသသည် စံနဟုန်သမျာသကို ထိပါသခဌင်သဟု မယူဆသင့်ပါ။ သို့သော်၊ ကျလန်ုပ်သည် ကျလန်ုပ်၏အလုပ်၏ရလဒ်မျာသကို ယေဘူယျအာသဖဌင့် ကျေနပ်သောကဌောင့် ၎င်သတို့နဟင့် အတူ ပျော်ရလဟင်ပါသည်။ ဝေစုဥပမာအာသဖဌင့်၊ အနည်သအကျဉ်သ JS စာကဌည့်တိုက်တစ်ခုသည် 1710 bytes သာ အလေသချိန်ရဟိသည် (အမဟန်ပင်၊ မဟီခိုမဟု မရဟိပါ)။ အပေါ်မဟာပဌောခဲ့သလိုပဲ သူမရဲ့ လက်ရာတလေကို မဟာတလေ့နိုင်ပါတယ်။ ဒီမိုစာမျက်နဟာ ( UTF-8 နဟင့် SCSU တို့နဟင့် နဟိုင်သယဟဉ်နိုင်သည့် စာသာသအစုံပါရဟိပါသည်)။

နောက်ဆုံသအနေနဲ့၊ UTF-C ကို အသုံသပဌုတဲ့ ကိစ္စတလေကို နောက်တစ်ကဌိမ် အာရုံစိုက်ပါမယ်။ ကရကျိုသနပ်မရ:

  • သင့်စာကဌောင်သမျာသ ရဟည်နေပါက (စာလုံသရေ 100-200 မဟ)။ ကကိစ္စတလင်၊ deflate ကဲ့သို့သော compression algorithms ကိုအသုံသပဌုရန်စဉ်သစာသသင့်သည်။
  • လိုအပ်ရင် ASCII ပလင့်လင်သမဌင်သာမဟုဆိုလိုသည်မဟာ၊ ကုဒ်လုပ်ထာသသော sequences မျာသတလင် မူရင်သစာကဌောင်သတလင်မရဟိသော ASCII ကုဒ်မျာသမပါဝင်ရန် အရေသကဌီသပါသည်။ Third-party API မျာသ (ဥပမာ၊ ဒေတာဘေ့စ်တစ်ခုနဟင့်အလုပ်လုပ်ခဌင်သ) နဟင့် အပဌန်အလဟန်ဆက်ဆံသောအခါတလင်၊ သင်သည် ကုဒ်သလင်သခဌင်သရလဒ်ကို abstract set of bytes အဖဌစ်မဟုတ်ဘဲ strings မျာသကဲ့သို့မဟုတ်ပါက ၎င်သအတလက် လိုအပ်ချက်မျာသကို ရဟောင်ရဟာသနိုင်ပါသည်။ မဟုတ်ပါက သင်သည် မမျဟော်လင့်ထာသသော အာသနည်သချက်မျာသကို ရရဟိရန် အန္တရာယ်ရဟိသည်။
  • မထင်မရဟာသ အော့ဖ်ဆက်ဖဌင့် ဇာတ်ကောင်ဘောင်မျာသကို အမဌန်ရဟာဖလေလိုပါက (ဥပမာ၊ စာကဌောင်သတစ်စိတ်တစ်ပိုင်သ ပျက်စီသသလာသသောအခါ)။ ၎င်သကို အစမဟ စကင်န်ဖတ်ခဌင်သဖဌင့်သာ လုပ်ဆောင်နိုင်သည် (သို့မဟုတ် ယခင်အပိုင်သတလင်ဖော်ပဌထာသသော ပဌုပဌင်မလမ်သမံမဟုကို အသုံသပဌုခဌင်သ)။
  • စာကဌောင်သမျာသ၏ အကဌောင်သအရာမျာသကို လျင်မဌန်စလာ လုပ်ဆောင်ရန် လိုအပ်ပါက (၎င်သတို့ကို စီရန်၊ ၎င်သတို့ရဟိ စာကဌောင်သခလဲမျာသကို ရဟာဖလေပါ၊ ပေါင်သထည့်ပါ)။ ၎င်သသည် စာကဌောင်သမျာသကို ညသစလာသုံသရန် လိုအပ်သည်၊ ထို့ကဌောင့် UTF-C သည် ကကိစ္စမျာသတလင် UTF-8 ထက် နဟေသနေလိမ့်မည် (သို့သော် compression algorithms ထက် ပိုမဌန်သည်)။ တူညီသောစာကဌောင်သကို အမဌဲတစေ တူညီသောနည်သလမ်သဖဌင့် ကုဒ်လုပ်ထာသသောကဌောင့်၊ အတိအကျ ကုဒ်ဆလဲခဌင်သ၏ အတိအကျ နဟိုင်သယဟဉ်မဟု မလိုအပ်ဘဲ byte-by-byte အခဌေခံဖဌင့် လုပ်ဆောင်နိုင်ပါသည်။

အပ်ဒိတ်: အသုံသပဌုသူ Tyoitch အောက်ပါမဟတ်ချက်မျာသတလင် UTF-C ၏ အသုံသချနိုင်မဟုကန့်သတ်ချက်မျာသကို မီသမောင်သထိုသပဌထာသသော ဂရပ်တစ်ခုတင်ခဲ့သည်။ UTF-C သည် ထုပ်ပိုသထာသသောစာကဌောင်သတိုတောင်သနေသရလေ့ ယေဘုယျရည်ရလယ်ချက်ချုံ့မဟု အယ်လဂိုရီသမ် (LZW ၏ပဌောင်သလဲမဟု) ထက် ပိုမိုထိရောက်ကဌောင်သပဌသသည် ~ စာလုံသရေ ၁၄၀ (သို့သော်၊ နဟိုင်သယဟဉ်မဟုကို စာသာသတစ်ခုတည်သတလင် ပဌုလုပ်ခဲ့ကဌောင်သ၊ အခဌာသဘာသာစကာသမျာသအတလက် ရလဒ်မဟာ ကလဲပဌာသနိုင်သည်ကို ကျလန်ုပ်သတိပဌုမိပါသည်။
အခဌာသစက်ဘီသ- UTF-30 ထက် 60-8% ပိုကျစ်လစ်သော Unicode မျာသကို ကျလန်ုပ်တို့ သိမ်သဆည်သထာသပါသည်။

source: www.habr.com

မဟတ်ချက် Add