Unicode, character encodings in programming and standard persian keyboard layout

Post on 24-May-2015

336 views 0 download

description

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

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

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

MashhadLUG.org

@bijan@quitter.se

ککد یون

“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=”&#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

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

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

“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کد ککد ککد پوینت یونی ککد کاراکتر یونی نام&zwj; U+200d ZERO WIDTH

JOINERاتصال مجازی

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

ب

ب ب `بب

ب

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

1 2 1

122

۱۲Num Lock Num Lock

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

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

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

JOINERاتصال مجازی

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

فاصله مجازی

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

دوشیم

میشود

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

دوشSpaceیم

م شود

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

دوشShiftSpaceیم +

م شود

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

“لوقلقن“

”نقل هقول “

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

L Shift+لقن

K Shift+

«نقل هقول»

لوق

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

فارس کیبورد استاندارد“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

پایان زیر متن

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

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

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

چپ

&#8237; 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”

ککد یون

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