Loading

Few things about UTF-8 Encoding and Myanmar

ျမန္မာစာဟာ ယူနီကုတ္ range ဟာ U+1000 ကေန U+109F ျကားမွာရွိျပီး
စာလံုးအေနနဲ့သိမ္းဖို့ ပံုမွန္အားျဖင့္ ၂ဘိုက္(wchar_t*1 or WORD or TCHAR?) လိုအပ္ပါတယ္။
စာလံုးတစ္လံုး(၁ဘိုက္ char)ျဖစ္တဲ့ 1-256အတြင္းမဆံ့လို့ပါ။
တခ်ို့ေနရာေတြမွာ ေဒတာ အသြင္းအထုတ္လုပ္တဲ့ အခ်ိန္မွာ စာလံုးတစ္လံုး char အေနနဲ့မွ အဆင္ေျပမယ့္ေနရာေတြရွိပါတယ္။ ဒါေျကာင့္ ပို့တဲ့အခ်ိန္မွာ char အေနနဲ့ပို့ျပီး ျပန္ေျပာင္းဖို့လိုပါတယ္။
UTF-8 ဟာအဲဒီအတြက္ျပဌာန္းထားတာ ရွိပါတယ္။

(*1 wchar_t is 4 bytes in Linux)

ေဟာဒီေနရာမွာ အဂဿငလိပ္လို အေသးစိတ္ေလ့လာလို့ရပါတယ္။ http://en.wikipedia.org/wiki/UTF-8

ျမန္မာစာလံုး က ဟာ \u1000 ျဖစ္ျပီး UTF8 မွာ E1 80 80 ဆိုျပီးျပပါတယ္။
AbCd ကေတာ့ AbCd အတိုင္းပါဘဲ။

အြန္လိုင္းေပါ္မွာ ေျပာင္းျကည့္ခ်င္ရင္ ေဟာ့ဒီမွာ လုပ္လို့ရပါတယ္။ http://rishida.net/scripts/uniview/conversion.php

E1 80 80 ကေန \u1000 ကို ေျပာင္းတဲ့ ပရိုဂရမ္ကို က်ေနာ္ ဒီလိုစမ္းထားပါတယ္။
အျခား full feature ပရိုဂရမ္ေတြ အမ်ားျကီးရွိပါတယ္။
http://enchantia.com/software/graphapp/package/src/utility/utf8.c

Seth ေရးထားတဲ့ ကုတ္လည္း ေတာ္ေတာ္ေကာင္းပါတယ္။

က်ေနာ္ကေတာ့ မတိုတိုေအာင္ေရးတာ ဝါသနာပါပါတယ္။ ဘယ္သူမွ မဖတ္တတ္ပါဘူး။ :P
ကြန္ပ်ူတာဖတ္ဖို့ေရးတာပါ။ ျပသဿသနာမရွိပါဘူး။ :D :D :D
do{
if(*s<0x80){*d++=*s;
}else if(*s>>4==0xf){s+=3;
}else if(*s>>5==7){*d=(((*s<<4)|(*&s[1]>>2&0xf)<<4)<<8)|((*&s[1]<<6)&3)|(*&s[2]&0x3f);s+=2;d++;
}else if(*s>>6==3){s+=1;}
}while(*s++);

*s ဟာ source string ကိုေထာက္ထားျပီး *d ဟာ destination string ကိုေထာက္ထားပါတယ္။
U+10000 အထက္ကဟာေတြကို ေက်ာ္ပစ္ပါတယ္။ ျမန္မာစာ အတြက္ မလိုပါဘူး။
U+127 + U+7FF ကိုလည္းေက်ာ္ထားပါတယ္။ က်ေနာ္ မလိုပါဘူး :P

python ကို port လုပ္ျပီးစမ္းထားပါတယ္။
% python
>>> import cburglish
>>> "aကaကခဂဃa"
'a\xe1\x80\x80a\xe1\x80\x80\xe1\x80\x81\xe1\x80\x82\xe1\x80\x83a'
>>> cburglish.utf8decode("aကaကခဂဃa")
u'a\u1000a\u1000\u1001\u1002\u1003a'

ဒါနဲ့ python မွာ အဲဒီဖန္ရွင္ built-in ပါပါတယ္။ မလိုပါဘူး။ က်ေနာ္ php extension အတြက္စမ္းထားတာပါ။

#ps Above codes are GPLv3, According to License, Free of charge to use, But Can't be use in Commercial Applications.

Cheers,
Soe Min

refs:
http://en.wikipedia.org/wiki/UTF-8
http://www.phpwact.org/php/i18n/utf-8#utf-8_dangerous_php_functionality
http://waitzar.googlecode.com/svn/trunk/cross_platform_library/waitzar/WordBuilder.cpp
http://enchantia.com/software/graphapp/package/src/utility/utf8.c

No comments:

က်ေနာ္ဖတ္ေသာ အျခား ဘေလာ့ / ဆိုဒ္မ်ား