background

ستانداردی یونیکۆد: جیاوازی نێوان UTF-8, UTF-16, UTF-32

هاوپۆل: گشتی  ژ.بابەت : 2291  بەروار : ئه‌یلول 29, 2018
QR Code For:  ستانداردی یونیکۆد: جیاوازی نێوان UTF-8, UTF-16, UTF-32

لە بەشی یەکەم باسێکی کورتی یونیکۆدمان کرد و پەیوندی یونیکۆدمان لەگەڵ زمانی کوردی خستەڕوو. لە بەشی دووەم باسی ئینکۆدینگ دەکەین. زۆرمان گوێ لێبووە کە کۆمپیوتەر زانیاری بە سفر و یەک هەلدەگرێت، بەڵام چۆن دەتوانێت نووسین، وێنە، ڤیدیۆ بکاتە سفر و یەک؟ گۆڕینی نووسین بۆ سفر و یەک پێی دەگوترێ Encoding و گۆڕینی سفر و یەک بۆ نووسین پێی دەگوترێ Decoding.

بۆ بینینی جیاوازی هەر یەک لە ئینکۆدینگەکانی یونیکۆد سەیرێکی ئەو ئامرازە بچکۆلەیە بکە کە بۆتمان درووستکردووە.

ASCII

پێش ASCII چەند ستانداردێکی دیکەی ئینکۆدینگ هەبوون، بەڵام ئەسکی کۆنترین جۆری ئینکۆدینگە کە تا ئێستا بەکاربێت. لەو ستانداردە هەر نووسەیەک (بچووکترین یەکەی مانادار: پیت، پیت، ژمارە، هێما…) بە ٧ بت دەنوێندرێن. واتە ستانداردەکە ١٢٨ نووسە لەخۆ دەگرێت کە پێکهاتووە لە ئەلفوبێی ئینگلیزی (بچووک و گەورە)، ژمارەکان، خاڵبەندی، لەگەڵ چەند نووسەیەکی دیکە کە پێیان دەگوترێ Control Characters یان Unprintable Characters کە بەکاردەهاتن لە لەیەن پڕۆگرامەرانەوە بۆ گەیاندنی مانایەکی دیاریکراو. بۆ نموونە نووسەی NUL (کۆدی 0) کۆتایی نووسینی دیاری دەکرد لە زمانی C.

بەو شێوەیە “Hello” هەڵدەگیرێت لە مێمۆری لە زمانی C

هەرچەندە ئینکۆد کردن بە ئەسکی شوێنی کەم دەگرێت لە مێمۆری، بەڵام کێشەی ئەوەیە هەیە کە پشتگیری هیچ زمانێکی دیکە ناکات جگە لە ئینگلیزی.

خشتەی نووسەکانی ئەسکی

ANSI

لەسەرەوە باسی ئەوەمان کرد کە ئەسکی ٧ بت بەکار دەهێنێت بۆ ئینکۆدکردنی نووسەکان، بەڵام بچووکترین یەکەی خاوەن ناونیشان (Smallest Addressable Unit) لە مێمۆری بایتە کە دەکاتە ٨ بت، بۆیە مامەڵەکردن لەگەڵ یەک بایت زۆر ئاسانترە لە مامەڵەکردن لەگەڵ ٧ بت. هەر بۆیەش هەرچەندە کە نووسەکان تەنیا ٧ بتیان پێویستە، بەڵام هێشتاش یەک بایتی تەواو بەکاردێنن. واتە یەک بتی کۆتایی بەفیڕۆ دەچێت.

لە ستانداردی ئەسکی بت-ی کۆتایی بەفیڕۆ دەچێت

بە بەکارهێنانی ٨ بت دەتوانی 28 = ٢٥٦ نووسەی جیاواز لە خۆ بگریت. بۆیە زۆر لە وڵاتان دەستیانکردن بە سوود وەرگرتن لەو بتەی کۆتایی بەو مەبەستەی کە وابکەن کۆمپیوتەر پشتگیری زمانەکانیان بکات. بەڵام لەبەر ئەوەی ئەو بتەی کۆتایی تەنیا ١٢٨ نووسەی نوێ بەردەست دەخات، کە بەس نییە بۆ ئەوەی پیتەکانی هەموو زمانەکانی دونیای پێ بنووسیت، بۆیە هەر وڵاتەی خشتەیەکی تایبەت بەخۆی درووستکرد بۆ بەکارهێنانی ئەو ١٢٨ نووسەیەی کۆتایی. ئەو خشتانە پێیان دەگوترێ Code pages یان Windows Code Pages، لە زۆر جێگاش پێیان دەگوترێ ANSI Code Pages.

لەبەر ئەوەی هەر وڵاتەی Code Page ێکی تایبەت بەخۆی بەکار دەهێنا، بۆیە گواستنەوەی داتا لە کۆمپیوتەرێکەوە بۆ کۆمپیوتەرێکی دیکە زۆر زەحمەت بوو ئەگەر کۆد پەیجی جیاوازیان بەکارهێنابا. لەبەر ئەوەی نووسەکانی سەرووی ١٢٧ لە هەر کۆد پەیجێک مانای جیاوازیان هەیە، بۆ نموونە لە کۆد پەیجی ٥٠٠ نووسەی ٢٠٣ دەکاتە “ô” لە کاتێکدا لە کۆد پەیجی ١٢٥٦ هەمان نووسە بەکاردێت بۆ نواندنی “ث“. لە زۆربەی ئەو کۆد پەیجانە هەر نووسەیەک بە یەک بایت دەنووسرا ( Single-Byte Character Set- SBCS)، بەڵام بۆ زمانی ژاپۆنی، چینی و کۆریی هەر نووسەیەک بە دوو بایت دەنووسرا، ئەو جۆرە کۆد پەیجانە پێیان دەگوترێ Double-Byte Character Set (DBCS).

Universal Coded Character Set

کۆد پەیجەکان لەبڕی ئەوەی کێشەی نووسین چارەسەر بکەن خراپتریان کردبوو و ببوونە هۆی سەرلێشێواوی گەورە. بۆیە ڕوون بوو کە پێوستیمان بە ستانداردێکی نوێ دەبێت بۆ ئەوەی بتوانین هەموو زمانەکانی پێ بنووسین. چەند ستانداردێک درووستکران لەلایەن ISO وە کە سادەترینیان UCS-2 ـە، کە تێیدا هەر نووسەیەک بە ٢ بایت دەنووسرێ، بەوەش دەتوانێت ٦٥ هەزار نووسە لەخۆی بگرێت. زۆر جار خەڵک UCS-2 و UTF-16 تێکەڵ دەکەن.

Unicode

بەڵام ٦٥ هەزار نووسە بەس نین بۆ ئەوەی بتوانین بە هەموو زمانەکانی جیهان بێ کێشە بنووسین، بۆیە بیر لەوە کراوە کە پێویست ناکا نووسەکان بە شێوەیەکی دیاریکراو بکرێنە باینەری، لە بڕی ئەوە هەر نووسەیەک هێمایەکی پێدەدرێت (Code Point) و دواتر ئەو کۆد پۆینتانە دەکرێ بە چەندین شێوازی جیاوا بکرێتە باینەری، بەو شێوەیە یونیکۆد درووستکرا. چەند ڕیگایەک هەیە بۆ گۆڕینی کۆد پۆیتنەکانی یونیکۆد بۆ باینەری: UTF-8، UTF-16، UTF-32. هەر هەموویان یونیکۆدن و دەتوانن هەموو نووسەکانی یونیکۆد بەتەواوی ئینکۆد بکەن.

هەرچەندە زۆر جۆری UTF هەن، بەڵام ئەو ٣ دانەیان لە هەموویان بڵاوترن:

UTF-32

سادەترین جۆری ئینکۆدینگی یونیکۆد UTF-32 ـە، کە تێیدا هەر نووسەیەک بە ٣٢ بت، یان ٤ بایت دەنووسرێت. چاکی ئەو ئینکۆدینگە لەوە دایە کە هەموو نووسەکان دوای ئینکۆدکردن هەمان درێژییان هەیە (Fixed-Length)، ئەوەش کار ئاسانی زۆر بۆ پڕۆگرامەرەکان دەکات. بەڵام لەگەڵ ئەوەشدا قەبارەیەکی یەکجار زۆر بە فیڕۆدەدات چونکە زۆربەی هەرە زۆری نووسینی کۆمپیوتەر بە ئینگلیزییە یانیش بە زمانێکە کە تەنها ٦٥ هەزار نووسەی یەکەمی ستانداردی یونیکۆد بەکاردێنێت، واتە تەنیا پێویستی بە ٢ بایتە لە کاتێکدا بۆ هەر دانەیەک ٤ بایت بەکاردەهێندرێت، بۆیە بەشێکی زۆری فایلەکان بە 0 پڕ دەبنەوە. بۆ نموونە UTF-32 بەو شێوەیە “Hello World” ئینکۆد دەکات:


ئەگەر تێبینی بکەی ¾ ی بایتەکان سفرن، واتە ئێمە ٧٥٪ ی بیرگەی کۆمپیوتەرەکەمان بەفیڕۆ دەدەین ئەگەر هەموو نووسینەکان بە UTF-32 هەڵبگرین.

UTF-16

نووسەکان لە یەکەی ٢ بایتی هەڵدەگریت. واتە بۆ ٦٥ هەزار نووسەی یەکەمی یونیکۆد پێویستی بە یەک یەکە (٢ بایت) هەیە، بۆ نووسەکانی دیکە پێویستی بە ٢ یەکە (٤ بایت) هەیە. ئەو دوو یەکەیەش پێیان دەگوترێ Surrogate Pair. یەکێکیان High Surrogate ی پێدەگوترێ و ئەوەی دیکە Low Surrogate ی پێ دەگوترێ. UTF-16 بە هۆی هۆکاری مێژوویی، زۆر نەرمەکاڵا بەکاری دێنن، لەوانە:لە Java، .Net Framework و Windows بەکاردێت.

لەبەر ئەوەی لە زۆربەی بەرهەمەکانی مایکڕۆسۆفت UTF-16 بەکاردێت، زۆر جار تەنیا بە Unicode دەنووسرێت. بۆ نموونە ئەگەر لە نۆتپاد بتەوێ ئینکۆدینگی فایلەکە بگۆڕیت، ئەو هەڵبژاردانەت دەداتێ

لەو وێنەیەی سەرەوە، نۆتپاد مەبەستی لە یونیکۆد UTF-16 یە

UTF-8

پێش درووستبوونی یونیکۆد زۆربەی بەرنامەکان لەسەر ستانداردی ئەسکی درووست دەکران، بۆیە زۆر گرنگ بوو کە وا بکرێت کە بتواندرێ ئەو بەرنامانە هێشتا بەکاربهێندرێن. UTF-8 بۆ ١٢٨ نووسەکەی ASCII یەک بایت بەکاردێنێت، بۆ نووسەکانی دیکەی یونیکۆدیش ٢ بایت تا ٤ بایت بەکاردێنێت. بەو شێوەیە بەتەواوی دەگونجێ لەگەڵ هەر بەرنامەیەک کە تەنیا ASCII قبوڵ بکات.

ئەوەش سوودێکی دیکەی ئەوەیە کە بۆ پیتە ئینگلیزییەکان و ژمارەکان، کە لە هەموو نووسەکانی دیکە باوترن، تەنیا ١ بایت بەکاردێت، بە بەراورد لەگەڵ UTF-32 کە هەر نووسەیەک بە ٤ بایت دەنووسرێ زۆر باشترە. UTF-8 زۆر بە بڵاوی لە وێب بەکاردەهێندرێت و چەند زمانێکی پڕۆگرامسازی (بەتایبەتی زمانە نوێیەکان بەکاری دێنن) وەکو: Go و Rust.

زانیاری زۆرتر

 

محمد یاسین

ژمارەی بابەتەکان: 19

قوتابی بەشی ئەندازیاریی سیستەمی زانیاری لە زانکۆی پۆلیتەکنیکی هەولێر