Unicode, character encodings in programming and standard persian keyboard layout
description
Transcript of Unicode, character encodings in programming and standard persian keyboard layout
ککد یون
“The Unicode”
جلسه باز نرم افزاری مشهد،
۹۲ اسفند ۴
پیشگفتار“The Introduction”
ککدچرا ؟یون “Why Unicode?”
م کنید …فکراگر “if you think ...”
ASCIIمتن ساده
ککد انکدینگ ( بایت�)۲ یون
کیبورد فارس مایکروسافت مناسب فارس نویس است
یا برای فارس نویس نیاز به ابزار فرمت بندی است
…حالاگر تا “If by now ...”
انکدینگ کاراکتر“The Character Encoding”
چیست؟انکدینگ کاراکتر “What is The Character Encoding?”
A BC
DE
F
G
HI
J
K
LM
N
O P
Q
R
S
T
U
V
Wx
Y
Z
0100110011011001011010010010001110101010110100110011000001100101010101000100111101101101001011010010101011110101010101010101
?!
#
<
ککدتاریخچه یون “The unicode History”
ااسکانکدینگ “ASCII Encoding”
کاراکتر�)۱۲۸ بیت (۷✔ کاراکتر کنترل۳۳✔ کاراکتر چاپ۹۵✔ بیت اضافی۱✔
بیت اضافیاسک و “ASCII and the extra bit”
بیت۸گسترش سیستم های ✔بیت مورد علهقه توسعه دهندگان✔
7 6 5 4 3 2 1
x x x x x x x♥
کاراکتر اضافی۱۲۸
بیت اضافیاسک و “ASCII and the extra bit”
ککدپیج ها و تولد آنس“ANSI and The birth of the Code Pages”
CP437 (IBM) CP1256 (Arabic)
Fix
edC
ode p
age
depe
nden
t
ککدپیج هامشکل ت “Code Pages Problems”
چندزبانه سازی عمل غیرممکن بود✔مشکل در ارتباط با سیستم های مختلف دیگر✔نامناسب برای زبان های آسیای✔
$ python>>> print chr(202).decode('cp437')╩>>> print chr(202).decode('cp1256')ت>>>
کاراکتر کدپیج هاتفاو ت میان “Difference between codepages characters”
ککداستاندارد یون “The Unicode standard”
English
العربية
فارس
עברית
日本語
Slovenščina
Հայերեն Русский
中文 Polski
Български ...
ککداستاندارد یون “The Unicode standard”
A Code PointU+hexadecimal
Basic Latin
Uppercase
Letter
Left to Right
Whitespace
Lowercase
Digit
ISO Control
Mirrored
AlphaNumeric
...
$ python>>> import unicodedata as ud>>> ud.name(u”ب”)'ARABIC LETTER BEH'>>> ud.category(u”ب”)'Lo'>>> ud.numeric(u” ”۳ )3.0>>>
خصوصیا ت کاراکترهایککد یون
“Unicode characters properties”
ککداستاندارد یون “The Unicode standard”
Code PointU+hexadecimal
0100110011011001011010010010001110101010110100110011000001100101010101000100111101101101001011010010101011110101010101010101
ککدانکدینگ های یون “The Unicode encodings”
“Hello” U+0048 U+0065 U+006C U+006C U+006F
ککدانکدینگ های یون “The Unicode encodings”
“Hello” U+0048 U+0065 U+006C U+006C U+006F
0048 0065 006C 006C 006F
4800 6500 6C00 6C00 6F00
ککدانکدینگ های یون “The Unicode encodings”
“Hello” U+0048 U+0065 U+006C U+006C U+006F
0048 0065 006C 006C 006F low-endian
4800 6500 6C00 6C00 6F00 hi-endian
ککدانکدینگ های یون “The Unicode encodings”
“Hello” U+0048 U+0065 U+006C U+006C U+006F
0048 0065 006C 006C 006F low-endian
4800 6500 6C00 6C00 6F00 hi-endianByte Order Mark
(BOM)FEFF
FFFE
ککدانکدینگ های یون “The Unicode encodings”
“Hello” U+0048 U+0065 U+006C U+006C U+006F
0048 0065 006C 006C 006F low-endian
4800 6500 6C00 6C00 6F00 hi-endianFEFF
FFFEByte Order Mark
(BOM)UCS-2
ککدمشکل ت انکدینگ های یون “The Unicode encodings cons”
عدم بهینگ در فضا با نگهداری بیت های صفر✔عدم سازگاری با انکدینگ اسک✔عدم سازگاری با برنامه های هقدیم✔
8UTF-انکدینگ “The UTF-8 encoding”
8UTF- انکدینگ“UTF-8 encoding”
طول متغیر
Bites First Last Bytes Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6
7 U+000 U+007F 1 0xxxxxxx
11 U+0080 U+07FF 2 110xxxxx 10xxxxxx
16 U+0800 U+FFFF 3 1110xxxx 10xxxxxx 10xxxxxx
21 U+10000 U+1FFFFF 4 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
26 U+200000 U+3FFFFFF 5 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
31 U+400000 U+7FFFFFFF 6 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
8UTF- انکدینگ“UTF-8 encoding”
بایت مقدمبایت های ادامه
معرف تعداد بایت های ادامه
Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 60xxxxxxx
110xxxxx 10xxxxxx
1110xxxx 10xxxxxx 10xxxxxx
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
8UTFمزایای انکدینگ “The UTF8 encoding pros”
بهینه در نگهداری فضا✔هقابلیت کشف خطا✔سازگاری کامل با انکدینگ اسک✔
ASCII “Hello” 48 65 6 6 6C C F-8 UTF “Hello ” 48 65 6 6 6C C F
ککددیگر انکدینگ های یون “Other unicode encodings”
✔ UCS-2 (LE-BE) + BOM✔ UTF-16 (LE-BE) + BOM✔ UTF-32 (LE-BE) + BOM✔ UTF-7
$ python>>> unichr(202).encode('utf-16le')'\xca\x00'>>> unichr(202).encode('utf-16be')'\x00\xca'>>> unichr(202).encode('utf-16')'\xff\xfe\xca\x00'>>> unichr(202).encode('utf-32')'\xff\xfe\x00\x00\xca\x00\x00\x00'>>> unichr(202).encode('utf-7')'+AMo-'
ککددیگر انکدینگ های یون “Other unicode encodings”
انکدینگ هاتبدیل“Character Encodings conversion”
طلیئنکتهیک “A Golden note”
«در حافظه چیزی به نام وجود ندارد»متن ساده
”There's nothing as plain text on memory”
«داشتن یک رشته بدون آن نوع اندینگدانستن
ب معن است»”It does not make sense to have a string without
knowing what encoding it uses”
انکدینگ نوع ارسال. ۱“Sending the encoding type”
✔ HTTP Content-Type: text/html; charset=UTF-8
✔ HTML 4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
✔ HTML 5 <meta charset="UTF-8">
✔ XML <xml encoding="UTF-8">
$ curl -I http://google.comHTTP/1.1 301 Moved PermanentlyLocation: http://www.google.com/Content-Type: text/html; charset=UTF-8Date: Mon, 24 Feb 2014 12:32:10 GMTExpires: Wed, 26 Mar 2014 12:32:10 GMTCache-Control: public, max-age=2592000Server: gwsContent-Length: 219X-XSS-Protection: 1; mode=blockX-Frame-Options: SAMEORIGIN$
انکدینگ نوع ارسال. ۱“Sending the encoding type”
نوع انکدینگشناسای. ۲“Detecting the encoding type”
https://en.wikipedia.org/wiki/Charset_detection
http://www-archive.mozilla.org/projects/intl/UniversalCharsetDetection.html
نوع انکدینگ مشخص نیست✔اطلعا ت نوع انکدینگ هقابل اطمینان نیست✔
موزیلراهکار شناسای انکدینگ “Mozilla universal charset detection”
https://en.wikipedia.org/wiki/Charset_detection
http://www-archive.mozilla.org/projects/intl/UniversalCharsetDetection.html
ککد✔ ششمای نسبت توزیع حروف✔نسبت توزیع دو حرف متوال✔
$ python>>> import chardet>>> "hello world".encode("utf16")'\xff\xfeh\x00e\x00l\x00l\x00o\x00 \x00w\x00o\x00r\x00l\x00d\x00'>>> chardet.detect(“\xff\xfeh\x00e\x00l\x00l\x00o \x00\x00w\x00o\x00r\x00l\x00d\x00”){'confidence': 1.0, 'encoding': 'UTF-16LE'}>>>
موزیلراهکار شناسای انکدینگ “Mozilla universal charset detection”
نوع انکدینگ!حدس زدن. ۳“Guess the type of encoding!”
ککداستفاده از در یون همه جا کافی است؟
“is using unicode in everywhere enough?”
$ str=”تسويه قبوض آب”$ dec2hex(){ echo “obase=16; $1” | bc }$ echo $str | grep -o “[0-9]*” | while read num; do echo -n “\x`dec2hex #num`”; done | chardet<stdin>: utf-8 (confidence: 0.99)$ python>>> real_string = (chr(216)+chr(170)+chr(216)+chr(179)+...).decode(“utf8”).encode(“ascii”, “xmlcharrefreplace”)>>> real_string'تسويهقبوضآب'>>> print real_string
رضوي خراسان استان روستائي آب قبوض تسويه>>>
همیشه شما تنها نیستید!تولیدکننده محتوا
“You're not always the only content producer!”
ککد و چندزبانیون “Unicode and multilingual”
دوجهتمتن “Bi-Directional Text”
RTLLTR
Bi-«این یک متن Directional«م باشد RTL
کاراکترهاجهت“Character's directional”
کاراکترهای خنثNeutral Characters
کاراکترهای هقویStrong Characters
کاراکترهای ضعیفWeak Characters
فاصله های خالعلیم نگارش
حروف الفبا اعداد
فارسکیبورد استاندارد “Persian standard keyboard”
و استانداردمؤسسه تحقیقا ت صنعت ایران
“Institute of StandardsAnd Industrial Research of Iran”
استانداردهای ملصفحه آرای (کیبورد�) فارس
“National standards of persian layout”
ISIRI 820
«حروف فارس درماشین تحریر»
۱۳۵۲
ISIRI 2901
«طرز هقرارگرفتن حروف و علیم زبان فارس بر روی
صفحه کلید»
۱۳۷۳
ISIRI 9147
«چیدمان حروف و علیم فارس بر صفحه کلید
رایانه»
۹۱۴۷استاندارد مل “ISIRI 9147”
ککد✔ مبتن بر استاندارد یون ۲۹۰۱سازگار با استاندارد ✔۶۲۱۹نویسه های استاندارد شده ✔دستور خط فارس مصوب فرهنگستان زبان و ادب✔
فارس کیبورد استاندارد“Persian standard keyboard”
فارس کیبورد استاندارد“Persian standard keyboard”
HTMLکد ککد ککد پوینت یونی ککد کاراکتر یونی نام‍ U+200d ZERO WIDTH
JOINERاتصال مجازی
۱سطح مثال های از کیبورد استاندارد فارس
ب
ب ب `بب
ب
۱سطح مثال های از کیبورد استاندارد فارس
1 2 1
122
۱۲Num Lock Num Lock
فارس کیبورد استاندارد“Persian standard keyboard”
فارس کیبورد استاندارد“Persian standard keyboard”
HTMLکد ککد ککد پوینت یونی ککد کاراکتر یونی نام‍ U+200d ZERO WIDTH
JOINERاتصال مجازی
‌ U+200c ZERO WIDTH NON-JOINER
فاصله مجازی
۲سطح مثال های از کیبورد استاندارد فارس
دوشیم
میشود
۲سطح مثال های از کیبورد استاندارد فارس
دوشSpaceیم
م شود
۲سطح مثال های از کیبورد استاندارد فارس
دوشShiftSpaceیم +
م شود
۲سطح مثال های از کیبورد استاندارد فارس
“لوقلقن“
”نقل هقول “
۲سطح مثال های از کیبورد استاندارد فارس
L Shift+لقن
K Shift+
«نقل هقول»
لوق
فارس کیبورد استاندارد“Persian standard keyboard”
فارس کیبورد استاندارد“Persian standard keyboard”
HTMLکد ککد ککد پوینت یونی ککد کاراکتر یونی نام‏ U+200f RIGHT-TO-LEFT
MARKنشانه راست به چپ
‎ U+200e LEFT-TO-RIGHT MARK
نشانه چپ به راست
‫ U+202b RIGHT-TO-LEFT EMBEDDING
زیر متن راست به چپ
‪ U+202a LEFT-TO-RIGHT EMBEDDING
زیر متن چپ به راست
‬ U+202c POP DIRECTIONAL FORMATTING
پایان زیر متن
فارس کیبورد استاندارد“Persian standard keyboard”
HTMLکد ککد ککد پوینت یونی ککد کاراکتر یونی نام‮ U+202e RIGHT-TO-LEFT
OVERRIDEزیرمتن اکیدا راست به
چپ
‭ U+202d RIGHT-TO-LEFT OVERRIDE
زیرمتن اکیدا چپ به راست
۳سطح مثال های از کیبورد استاندارد فارس
...و Space
و ...
۳سطح مثال های از کیبورد استاندارد فارس
m Right Alt+
و …و
۳سطح مثال های از کیبورد استاندارد فارس
Helloعمهب
مالس یان
Hello به معنای سلم
۳سطح مثال های از کیبورد استاندارد فارس
Helloب
السعمه
م
یان
Helloبه معنای سلم 0 right Alt+
۳سطح مثال های از کیبورد استاندارد فارس
ویارددراو
دیوش c:/
:/ شویدcوارد درایو
۳سطح مثال های از کیبورد استاندارد فارس
ویارددراو
دیوش
[ right Alt+c:/
شویدc/:وارد درایو
p right Alt+
کیبورد استاندارد فارس و سازگاری با گذشته
Persian Standard keyboardand backward compatibility
شماوهقت و حوصلهبا تشکر از
Thank you for your time and patience
پاسخ و پرسش
“Question/Answer”
ککد یون
توسط بیژن ابراهیم