Unicode, character encodings in programming and standard persian keyboard layout

81
بیژن ابراهیمعضو» لینوکس مشهدبران وه کار گر« MashhadLUG.org @bijan@quitter.se

description

در این ارائه با ابتدایی‌ترین معلوماتی که یک برنامه‌نویس باید در مورد کدگذاری‌های نویسه‌ها (کاراکتر انکدینگ‌ها) داشته باشد آشنا می‌شویم. سیری بر تاریخچه کدگذاری‌ها خواهیم داشت و خواهیم دید چگونه از مشکلات معمول در این ضمینه اجتناب کرد. همچنین در انتها با کیبورد استاندارد فارسی و سطوح کاربردی مختلف آن آشنا خواهیم شد

Transcript of Unicode, character encodings in programming and standard persian keyboard layout

Page 1: Unicode, character encodings in programming and standard persian keyboard layout

بیژن ابراهیم»گروه کاربران لینوکس مشهد«عضو

MashhadLUG.org

@[email protected]

Page 2: Unicode, character encodings in programming and standard persian keyboard layout

ککد یون

“The Unicode”

جلسه باز نرم افزاری مشهد،

۹۲ اسفند ۴

Page 3: Unicode, character encodings in programming and standard persian keyboard layout

پیشگفتار“The Introduction”

Page 4: Unicode, character encodings in programming and standard persian keyboard layout

ککدچرا ؟یون “Why Unicode?”

Page 5: Unicode, character encodings in programming and standard persian keyboard layout

م کنید …فکراگر “if you think ...”

ASCIIمتن ساده

ککد انکدینگ ( بایت�)۲ یون

کیبورد فارس مایکروسافت مناسب فارس نویس است

یا برای فارس نویس نیاز به ابزار فرمت بندی است

Page 6: Unicode, character encodings in programming and standard persian keyboard layout

…حالاگر تا “If by now ...”

Page 7: Unicode, character encodings in programming and standard persian keyboard layout

انکدینگ کاراکتر“The Character Encoding”

Page 8: Unicode, character encodings in programming and standard persian keyboard layout

چیست؟انکدینگ کاراکتر “What is The Character Encoding?”

Page 9: Unicode, character encodings in programming and standard persian keyboard layout

A BC

DE

F

G

HI

J

K

LM

N

O P

Q

R

S

T

U

V

Wx

Y

Z

0100110011011001011010010010001110101010110100110011000001100101010101000100111101101101001011010010101011110101010101010101

?!

#

<

Page 10: Unicode, character encodings in programming and standard persian keyboard layout

ککدتاریخچه یون “The unicode History”

Page 11: Unicode, character encodings in programming and standard persian keyboard layout

ااسکانکدینگ “ASCII Encoding”

کاراکتر�)۱۲۸ بیت (۷✔ کاراکتر کنترل۳۳✔ کاراکتر چاپ۹۵✔ بیت اضافی۱✔

Page 12: Unicode, character encodings in programming and standard persian keyboard layout

بیت اضافیاسک و “ASCII and the extra bit”

بیت۸گسترش سیستم های ✔بیت مورد علهقه توسعه دهندگان✔

7 6 5 4 3 2 1

x x x x x x x♥

کاراکتر اضافی۱۲۸

Page 13: Unicode, character encodings in programming and standard persian keyboard layout

بیت اضافیاسک و “ASCII and the extra bit”

Page 14: Unicode, character encodings in programming and standard persian keyboard layout

ککدپیج ها و تولد آنس“ANSI and The birth of the Code Pages”

CP437 (IBM) CP1256 (Arabic)

Fix

edC

ode p

age

depe

nden

t

Page 15: Unicode, character encodings in programming and standard persian keyboard layout

ککدپیج هامشکل ت “Code Pages Problems”

چندزبانه سازی عمل غیرممکن بود✔مشکل در ارتباط با سیستم های مختلف دیگر✔نامناسب برای زبان های آسیای✔

Page 16: Unicode, character encodings in programming and standard persian keyboard layout

$ python>>> print chr(202).decode('cp437')╩>>> print chr(202).decode('cp1256')ت>>>

کاراکتر کدپیج هاتفاو ت میان “Difference between codepages characters”

Page 17: Unicode, character encodings in programming and standard persian keyboard layout

ککداستاندارد یون “The Unicode standard”

Page 18: Unicode, character encodings in programming and standard persian keyboard layout

English

العربية

فارس

עברית

日本語

Slovenščina

Հայերեն Русский

中文 Polski

Български ...

Page 19: Unicode, character encodings in programming and standard persian keyboard layout

ککداستاندارد یون “The Unicode standard”

A Code PointU+hexadecimal

Basic Latin

Uppercase

Letter

Left to Right

Whitespace

Lowercase

Digit

ISO Control

Mirrored

AlphaNumeric

...

Page 20: Unicode, character encodings in programming and standard persian keyboard layout

$ python>>> import unicodedata as ud>>> ud.name(u”ب”)'ARABIC LETTER BEH'>>> ud.category(u”ب”)'Lo'>>> ud.numeric(u” ”۳ )3.0>>>

خصوصیا ت کاراکترهایککد یون

“Unicode characters properties”

Page 21: Unicode, character encodings in programming and standard persian keyboard layout

ککداستاندارد یون “The Unicode standard”

Code PointU+hexadecimal

0100110011011001011010010010001110101010110100110011000001100101010101000100111101101101001011010010101011110101010101010101

Page 22: Unicode, character encodings in programming and standard persian keyboard layout

ککدانکدینگ های یون “The Unicode encodings”

“Hello” U+0048 U+0065 U+006C U+006C U+006F

Page 23: Unicode, character encodings in programming and standard persian keyboard layout

ککدانکدینگ های یون “The Unicode encodings”

“Hello” U+0048 U+0065 U+006C U+006C U+006F

0048 0065 006C 006C 006F

4800 6500 6C00 6C00 6F00

Page 24: Unicode, character encodings in programming and standard persian keyboard layout

ککدانکدینگ های یون “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

Page 25: Unicode, character encodings in programming and standard persian keyboard layout

ککدانکدینگ های یون “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

Page 26: Unicode, character encodings in programming and standard persian keyboard layout

ککدانکدینگ های یون “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

Page 27: Unicode, character encodings in programming and standard persian keyboard layout

ککدمشکل ت انکدینگ های یون “The Unicode encodings cons”

عدم بهینگ در فضا با نگهداری بیت های صفر✔عدم سازگاری با انکدینگ اسک✔عدم سازگاری با برنامه های هقدیم✔

Page 28: Unicode, character encodings in programming and standard persian keyboard layout

8UTF-انکدینگ “The UTF-8 encoding”

Page 29: Unicode, character encodings in programming and standard persian keyboard layout

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

Page 30: Unicode, character encodings in programming and standard persian keyboard layout

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

Page 31: Unicode, character encodings in programming and standard persian keyboard layout

8UTFمزایای انکدینگ “The UTF8 encoding pros”

بهینه در نگهداری فضا✔هقابلیت کشف خطا✔سازگاری کامل با انکدینگ اسک✔

ASCII “Hello” 48 65 6 6 6C C F-8 UTF “Hello ” 48 65 6 6 6C C F

Page 32: Unicode, character encodings in programming and standard persian keyboard layout

ککددیگر انکدینگ های یون “Other unicode encodings”

✔ UCS-2 (LE-BE) + BOM✔ UTF-16 (LE-BE) + BOM✔ UTF-32 (LE-BE) + BOM✔ UTF-7

Page 33: Unicode, character encodings in programming and standard persian keyboard layout

$ 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”

Page 34: Unicode, character encodings in programming and standard persian keyboard layout

انکدینگ هاتبدیل“Character Encodings conversion”

Page 35: Unicode, character encodings in programming and standard persian keyboard layout

طلیئنکتهیک “A Golden note”

Page 36: Unicode, character encodings in programming and standard persian keyboard layout

«در حافظه چیزی به نام وجود ندارد»متن ساده

”There's nothing as plain text on memory”

Page 37: Unicode, character encodings in programming and standard persian keyboard layout

«داشتن یک رشته بدون آن نوع اندینگدانستن

ب معن است»”It does not make sense to have a string without

knowing what encoding it uses”

Page 38: Unicode, character encodings in programming and standard persian keyboard layout

انکدینگ نوع ارسال. ۱“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">

Page 39: Unicode, character encodings in programming and standard persian keyboard layout

$ 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”

Page 40: Unicode, character encodings in programming and standard persian keyboard layout

نوع انکدینگشناسای. ۲“Detecting the encoding type”

https://en.wikipedia.org/wiki/Charset_detection

http://www-archive.mozilla.org/projects/intl/UniversalCharsetDetection.html

نوع انکدینگ مشخص نیست✔اطلعا ت نوع انکدینگ هقابل اطمینان نیست✔

Page 41: Unicode, character encodings in programming and standard persian keyboard layout

موزیلراهکار شناسای انکدینگ “Mozilla universal charset detection”

https://en.wikipedia.org/wiki/Charset_detection

http://www-archive.mozilla.org/projects/intl/UniversalCharsetDetection.html

ککد✔ ششمای نسبت توزیع حروف✔نسبت توزیع دو حرف متوال✔

Page 42: Unicode, character encodings in programming and standard persian keyboard layout

$ 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”

Page 43: Unicode, character encodings in programming and standard persian keyboard layout

نوع انکدینگ!حدس زدن. ۳“Guess the type of encoding!”

Page 44: Unicode, character encodings in programming and standard persian keyboard layout

ککداستفاده از در یون همه جا کافی است؟

“is using unicode in everywhere enough?”

Page 45: Unicode, character encodings in programming and standard persian keyboard layout
Page 46: Unicode, character encodings in programming and standard persian keyboard layout

$ str=”&#216;&#170;&#216;&#179;&#217;&#136;&#217;&#138;&#217;&#135; &#217;&#130;&#216;&#168;&#217;&#136;&#216;&#182; &#216;&#162;&#216;&#168;”$ 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'&#1578;&#1587;&#1608;&#1610;&#1607;&#1602;&#1576;&#1608;&#1590;&#1570;&#1576;'>>> print real_string

رضوي خراسان استان روستائي آب قبوض تسويه>>>

Page 47: Unicode, character encodings in programming and standard persian keyboard layout

همیشه شما تنها نیستید!تولیدکننده محتوا

“You're not always the only content producer!”

Page 48: Unicode, character encodings in programming and standard persian keyboard layout

ککد و چندزبانیون “Unicode and multilingual”

Page 49: Unicode, character encodings in programming and standard persian keyboard layout

دوجهتمتن “Bi-Directional Text”

RTLLTR

Bi-«این یک متن Directional«م باشد RTL

Page 50: Unicode, character encodings in programming and standard persian keyboard layout

کاراکترهاجهت“Character's directional”

کاراکترهای خنثNeutral Characters

کاراکترهای هقویStrong Characters

کاراکترهای ضعیفWeak Characters

فاصله های خالعلیم نگارش

حروف الفبا اعداد

Page 51: Unicode, character encodings in programming and standard persian keyboard layout

فارسکیبورد استاندارد “Persian standard keyboard”

Page 52: Unicode, character encodings in programming and standard persian keyboard layout

و استانداردمؤسسه تحقیقا ت صنعت ایران

“Institute of StandardsAnd Industrial Research of Iran”

Page 53: Unicode, character encodings in programming and standard persian keyboard layout

استانداردهای ملصفحه آرای (کیبورد�) فارس

“National standards of persian layout”

Page 54: Unicode, character encodings in programming and standard persian keyboard layout

ISIRI 820

«حروف فارس درماشین تحریر»

۱۳۵۲

Page 55: Unicode, character encodings in programming and standard persian keyboard layout

ISIRI 2901

«طرز هقرارگرفتن حروف و علیم زبان فارس بر روی

صفحه کلید»

۱۳۷۳

Page 56: Unicode, character encodings in programming and standard persian keyboard layout

ISIRI 9147

«چیدمان حروف و علیم فارس بر صفحه کلید

رایانه»

Page 57: Unicode, character encodings in programming and standard persian keyboard layout

۹۱۴۷استاندارد مل “ISIRI 9147”

ککد✔ مبتن بر استاندارد یون ۲۹۰۱سازگار با استاندارد ✔۶۲۱۹نویسه های استاندارد شده ✔دستور خط فارس مصوب فرهنگستان زبان و ادب✔

Page 58: Unicode, character encodings in programming and standard persian keyboard layout

فارس کیبورد استاندارد“Persian standard keyboard”

Page 59: Unicode, character encodings in programming and standard persian keyboard layout

فارس کیبورد استاندارد“Persian standard keyboard”

HTMLکد ککد ککد پوینت یونی ککد کاراکتر یونی نام&zwj; U+200d ZERO WIDTH

JOINERاتصال مجازی

Page 60: Unicode, character encodings in programming and standard persian keyboard layout

۱سطح مثال های از کیبورد استاندارد فارس

ب

ب ب `بب

ب

Page 61: Unicode, character encodings in programming and standard persian keyboard layout

۱سطح مثال های از کیبورد استاندارد فارس

1 2 1

122

۱۲Num Lock Num Lock

Page 62: Unicode, character encodings in programming and standard persian keyboard layout

فارس کیبورد استاندارد“Persian standard keyboard”

Page 63: Unicode, character encodings in programming and standard persian keyboard layout

فارس کیبورد استاندارد“Persian standard keyboard”

HTMLکد ککد ککد پوینت یونی ککد کاراکتر یونی نام&zwj; U+200d ZERO WIDTH

JOINERاتصال مجازی

&zwnj; U+200c ZERO WIDTH NON-JOINER

فاصله مجازی

Page 64: Unicode, character encodings in programming and standard persian keyboard layout

۲سطح مثال های از کیبورد استاندارد فارس

دوشیم

میشود

Page 65: Unicode, character encodings in programming and standard persian keyboard layout

۲سطح مثال های از کیبورد استاندارد فارس

دوشSpaceیم

م شود

Page 66: Unicode, character encodings in programming and standard persian keyboard layout

۲سطح مثال های از کیبورد استاندارد فارس

دوشShiftSpaceیم +

م شود

Page 67: Unicode, character encodings in programming and standard persian keyboard layout

۲سطح مثال های از کیبورد استاندارد فارس

“لوقلقن“

”نقل هقول “

Page 68: Unicode, character encodings in programming and standard persian keyboard layout

۲سطح مثال های از کیبورد استاندارد فارس

L Shift+لقن

K Shift+

«نقل هقول»

لوق

Page 69: Unicode, character encodings in programming and standard persian keyboard layout

فارس کیبورد استاندارد“Persian standard keyboard”

Page 70: Unicode, character encodings in programming and standard persian keyboard layout

فارس کیبورد استاندارد“Persian standard keyboard”

HTMLکد ککد ککد پوینت یونی ککد کاراکتر یونی نام&rlm; U+200f RIGHT-TO-LEFT

MARKنشانه راست به چپ

&lrm; U+200e LEFT-TO-RIGHT MARK

نشانه چپ به راست

&#8235; U+202b RIGHT-TO-LEFT EMBEDDING

زیر متن راست به چپ

&#8234; U+202a LEFT-TO-RIGHT EMBEDDING

زیر متن چپ به راست

&#8236; U+202c POP DIRECTIONAL FORMATTING

پایان زیر متن

Page 71: Unicode, character encodings in programming and standard persian keyboard layout

فارس کیبورد استاندارد“Persian standard keyboard”

HTMLکد ککد ککد پوینت یونی ککد کاراکتر یونی نام&#8238; U+202e RIGHT-TO-LEFT

OVERRIDEزیرمتن اکیدا راست به

چپ

&#8237; U+202d RIGHT-TO-LEFT OVERRIDE

زیرمتن اکیدا چپ به راست

Page 72: Unicode, character encodings in programming and standard persian keyboard layout

۳سطح مثال های از کیبورد استاندارد فارس

...و Space

و ...

Page 73: Unicode, character encodings in programming and standard persian keyboard layout

۳سطح مثال های از کیبورد استاندارد فارس

m Right Alt+

و …و

Page 74: Unicode, character encodings in programming and standard persian keyboard layout

۳سطح مثال های از کیبورد استاندارد فارس

Helloعمهب

مالس یان

Hello به معنای سلم

Page 75: Unicode, character encodings in programming and standard persian keyboard layout

۳سطح مثال های از کیبورد استاندارد فارس

Helloب

السعمه

م

یان

Helloبه معنای سلم 0 right Alt+

Page 76: Unicode, character encodings in programming and standard persian keyboard layout

۳سطح مثال های از کیبورد استاندارد فارس

ویارددراو

دیوش c:/

:/ شویدcوارد درایو

Page 77: Unicode, character encodings in programming and standard persian keyboard layout

۳سطح مثال های از کیبورد استاندارد فارس

ویارددراو

دیوش

[ right Alt+c:/

شویدc/:وارد درایو

p right Alt+

Page 78: Unicode, character encodings in programming and standard persian keyboard layout

کیبورد استاندارد فارس و سازگاری با گذشته

Persian Standard keyboardand backward compatibility

Page 79: Unicode, character encodings in programming and standard persian keyboard layout
Page 80: Unicode, character encodings in programming and standard persian keyboard layout

شماوهقت و حوصلهبا تشکر از

Thank you for your time and patience

Page 81: Unicode, character encodings in programming and standard persian keyboard layout

پاسخ و پرسش

“Question/Answer”

ککد یون

توسط بیژن ابراهیم