Tuesday, March 29, 2011

Unicode гэж юу вэ?


ЮНИКОД (англиар UNICODE) нь дэлхий дээрх бүх үсэг, тэмдэгт болон тэмдэглэгээг 16 битийн тоон кодоор дүрсэлсэн дүрслэл (16 бит дүрслэл) юм. "Uni" гэдэг нь <<нэг>>, "code" гэдэг нь <<код>> л гэсэн үг ба утгачилбал "нэгдсэн тэмдэглэгээ" гэж бууна. Анх тооцоолуур нь 127 тэмдэгт дүрслэх боломжтой буюу ASCII хэмээн алдаршсан 7 битийн дүрслэлтэйгээр зохиогдсон ба хожим 8 бит болгон өргөтгөгдөн 127-255 хүртэлх зайнд удирдах тэмдэгтүүд ба исо стандартын (ISO Latin-1) тэмдэгтийн олонлогуудыг байрлуулсан. Тэмдэгтийн стандартуудын тухай энгийн тайлбарыг http://en.wikipedia.org/wiki/ISO_8859-1/ хуудсаас уншиж болно. Ингээд кодчилолын тусламжтай 192-224 байрлалд янз бүрийн улсын олон янзын тэмдэгтүүдийг кодлон дүрслэх болсон. Гэтэл энэ нь олон улсын өгөгдлийн солилцоонд тун бэрхшээлтэй зүйл болж мэдээллийн солилцоог ч удаашруулах нөхцөл болсон. Эдгээр асуудлыг шийдэж олон янзын кодчилолуудыг халж юникод хэмээх стандарт үүсчээ. Үүнийг ЮНИКОД консерциумаар 1991 оноос эхлэн хөгжүүлж ирсэн. Юникод консерциум анх өнөөг хүртэл мэдэгдэж байгаа
тэмдэглэгээнүүдийн тоо нь 16 битийн бүхэл тоонд багтана гэж үзээд нийт 2-н 16 зэрэг буюу 65536 ширхэг тэмдэглэх боломжтойгоор гаргасан. Эхний 256 код нь үндсэн латин үсэг болон тэмдэгтүүдийг үлдсэн хэсэг нь бусад олон улсын тэмдэглэгээ манай кирилл болон монгол бичгийн тэмдэгтүүдийг дүрслэнэ. Гэтэл удалгүй 16 бит нь дэлхийн бүх тэмдэглэгээг тэмдэглэхэд хүрэлцэхгүй болж ахин 16 битийн муж нэмсэн ба тэр муж түвшин буюу англиар Plane нэмээн нэрлэгдэх болсон. Ингээд юникод 2.0 гэж шинэчилэгдсэн хувилбар гарсан. Илүү өргөн мэдэхийг хүсвэл www.unicode.org руу орж уншиж болно. Гэтэл бас өөр нэг стандарт болох ISO 10646 стандарт гэж байдаг. Азаар энэ 2-с өөр давхар байтын кодчилолын стандарт байхгүй. Энэ нь дэлхий дээрхи бүх тэмдэгт болон тэмдэглэгээний 16 битийн код(16 бит дүрслэл) юм. Үүнийг ЮНИКОД консерциумаар 1991 оноос хөгжүүлж ирсэн. Өнөөг хүртэл мэдэгдэж байгаа кодууд нь 16 битийн бүхэл тоонд багтана гэж үзэж байсан ба gЭхний 256 код нь Латин-1 -ын тэмдэгтүүдийг дүрслэнэ. Нийт 2-н 16 зэрэг буюу 65536 тэмдэгт дүрслэх боломжтойгоос одоогоор 49000-д хүрээд байгаагын 21000 нь хятад ханзанд хэрэглэгддэг. 16 битийн эхний 8 бит хэлийг сүүлийн 8 бит кодыг илтгэдэг.
"ISO 10646" гэж юу вэ? гэсэн асуудал гарах байх.
ISO стандарт нь UCS(Univeral Character Set)- ийг тодорхойлдог. UCS- ийг бүх тэмдэгтүүдийн олонлогийн нэгдэл буюу эх олонлог гэж ойлгож болно. Мэдээж зорилго нь UNICODE-той адилхан. Харин энэ UCS нь эргэн хөрвөхөд баталгаа өгдөг. Өөрөөр хэлбэл та нэг тэкстийг UCS рүү хөрвүүлээд буцаагаад эх тэкст рүү хөрвүүлэхэд ямар ч мэдээлэлийн алдагдал гарахгүй гэсэн үг. UCS нь амьдрал дээр байгаа бүх хэлүүдийн тэмдэгтүүдийг дүрслэхийг зорьдог. Тэгэхээр энэ нь зөвхөн Латин, Грек, крилл, Хебрев, Араб, Армен, Гүрж төдийгүй Хятад, Япон, Солонгос зэрэг ханзууд тэгээд цаашилбал манай классик монгол бичиг, Каннада, Малаялам, Тай, Лао, Кхмэр, Бопомофо, Тибэтиан, Руниц, Этиоп, Цанад Сыллаби, Чэрокээ, Огхам, Мянмар, Сингал, Тхаанаа, Юи болон бусад тэмдэгтүүдийг агуулдаг. Мөн хамраагүй байгаа бичгүүдийг яаж хамгийн сайнаар кодолж мөн нэмэх боломжтой хэвээр нь үлдээх вэ гэдэг нь судлагдсаар байдаг. UCS мөн олон тооны Графикын, типографын, математик болон өөр шинжлэх ухааны тэмдэгүүдийг агуулдаг ба тэдгээр нь TeX, Postscript, APL, MS-DOS, MS-Windows, Macintosh, OCR fonts мөн түүнчлэн олон word process ба хэвлэлийн системээр хангагддаг. ISO 10646 формалаар 31-бит тэмдэгтийн олонлогийг тодорхойлдог. Хамгийн өргөн хэрэглэгддэг тэмдэгтүүд болон хуучин байсан кодолж байсан стандарт-ууд 65536 байрлалийнхаа (31 бит) эхэнд өөрөөр хэлбэл (0x0000 - 0xFFFD) -д байрладаг. 16 бит UCS-ийн дэд олонлог нь юникодод Basic Multilingual Plane (BMP) эсвэл Plane 0 гэж нэрлэгддэг. Тиймээс энэ нь 2-н 16*2=32 зэрэг буюу 4.294.967.296 ширхэг тэмдэгт хаяглах боломжтой гэсэн үг юм. Одоогийн байдлаар дэлхийн бүх тэмдэгт 21-бит кодоос хэтрэхгүй гэсэн тооцоо байдаг. Тэр нь 0x000000- ээс 0x10FFFF хүртэлхи байрлал буюу бит бүр нь 1 саяаас илүү тэмдэгт дүрслэх боломжтой болно гэсэн үг. ISO 10646-1 стандарт нь анх 1993 онд хэвлэгдсэн бөгөөд тэмдэгтийн олонлогийн архитектур болон BMP-ийн агуулагийг тодорхойлсон юм. 2-р хэсэг болох ISO 10646-2 нь 2001 онд нэмэгдсэн ба BMP-ээс гаднах тэмдэгтүүдийн кодчилолийг(дүрслэл) тодорхойлдог. Шинэ тэмдэгтүүд нэмэгдэх боломжтой ба харин хуучин тэмдэгтүүдийг солих болон устгах боломжгүй. UCS нь тэмдэгт бүрийг кодийн дугаараар нь эмхэтгэх биш официал нэрээр нь бас эмхэтгэдэг. UCS юмуу UNICODE-ийг 16-тийн дугаараар дүрслэхдээ ихэнхдээ "U+" гэж тэмдэглэдэг. Жишээ нь "U+1198" бол манай том Ү үсэгийн код. UCS тэмдэгтүүд U+0000 аас U+007F хүртэл US-ASCII (ISO 646 IRV) байдаг ба U+0400- ээс U+04FF хүртэлхийг ISO 8859-5 (Крилл) гэж нэрлэдэг. U+E000- с U+F8FF хүртэлх зай ба BMP- ээс илүү зай нөөцлөгдсөн байдаг. UCS нь хэд хэдэн байт урттай тэмдэгт кодлохдоо хэд хэдэн арга хэрэглэдэг ба үндсэн 2 арга нь UTF-8 болон UTF-16 юм. Доор дэлгэрэнгүй тайлбарласан байгаа.
UCS-ийн хэрэгжүүлэлтийн үе шатууд?
1-р шат: Тэмдэгтүүдийн комбинац болон Хангул Жамо тэмдэгтүүд ороогүй. 2-р шат: Хэд хэдэн бичгийн хувьд энэ нь 1-р шаттай адилхан боловч тэмдэгтийн комбинацууд (жишээлбэл Hebrew, Arabic, Devangari, Bengali, Gurmukhi, Gujarati, Oriya, Tamil, Telugo, Kannada, Malayalam, Thai болон Lao гэх мэт) нэмэгдсэн. Эдгээр бичгүүд ядаж 1 тухайн тэмдэгтийн комбинац байхгүй үед UCS- д хангалттай дүрслэгдэж чадахгүй! (Дөрвөлжин, асуултийн гэх мэт тэмдэгтүүд гарна!) 3-р шат Бүх UCS тэмдэгтүүд орсон.
Тэгээд Unicode болон ISO10646- ийн юу нь ялгаатай юм бэ?
Unicode Стандарт "Unicode Concortium"- аар ИСО 10646- ийн 3 шатанд хэвлэгдсэн. 2 стандартын бүх тэмдэгтүүд адил байрлалд байрласан ба тэмдэгтүүд адилханаар нэрлэгдсэн. Unicode Стандарт нилээд хэдэн тэмдэгтүүдийн хувьд хамаагүй илүү утга хамааруулж тодорхойлсон ба ерөнхийдөө илүү сайн чанартай хэвлэх техникийн системээр хэрэгжисэн. Unicode нь зарим бичигүүдийн (жишээ нь араб) хэлбэрийг зурагчилан дүрслэх алгоритмуудийг, 2 талийн тэкстүүдийг(жишээ нь Латин болон Хэбрэв-ийн холимог тэкст) дүрслэх алгоритмууд, мөн үг сортлох, харьцуулах, гэх мэт олон алгоритм-уудийг тодорхойлсон. Харин нөгөө талаас ISO 10646 стандарт энгийн тэмдэгтийн олонлогийн хувьд бидний мэдэх ИСО 8859 ?тайгаа харьцуулахад тийм ч илүү болж чадаагүй. ISO 10646 нь стандарттай холбоотой нэр томьео, кодчилолийн боломж болон UCS- ийг бусад ISO стандартаар (ISO 6429, ISO 2022, гэх мэт) үүссэн тэкстүүдийг холбоход яаж хэрэглэх гэх мэтийг тодорхойлсон. ISO 14651 нь UCS үгүүдийг яаж сортлохийг нарийн тодорхойлсон.
ЯАГААД UNICODE эсвэл ISO 10646-г ХЭРЭГЛЭХ БОЛОВ?
Хэрвээ та ердөө 8 битийн тэмдэгтүүд хэрэглэвэл зөвхөн нэг хэлээр баримт үүсгэх ба түүнийгээ ижил тэмдэгт хэрэглэдэг хүмүүстэй солилцоно гэсэн үг. Юникод бол олон хэлийг (бүх хэл ч байж болно) нэг баримтад холих болон тэдгээрийг өөр өөр улсын хүмүүс хоорондоо солилцох хамгийн ухаалаг зам. Та жишээ нь монгол болгар толийг юникод ашиглахгүйгээр бичих гээд үз л дээ. Энэ нь тийм ч хялбар биш.
UTF-8 ба UTF-16 ямар учиртай вэ?
UTF нь Transfer Format гэдгийг товчилсон үг. Тэдгээр нь юникоднь тэмдэгтүүдийг битэд яаж дүрслэхийг тодорхойлдог. Тэмдэгт тус бүр нь 16 битийн юникоддугаараар илэрхийлэгдэж байвал түүнийг UTF-16 гэнэ. Жишээ нь, Латин-1 тэмдэгтүүд UTF-16-д 00xx гэсэн 16-тийн илэрхийлэлээр бичигдэнэ. xx нь өөрийн Латин-1 дэх 16-тийн илэрхийлэлэл. Хэрвээ юникод тэмдэгтүүд байтуудын урсгалаар дүрслэгдэж байвал UTF-8 гэж яридаг. 0-127 гэсэн утгатай байт-уудийг ASCII- тай нь харгалзуулдаг. Бусад тэмдэгтүүд 1-ээс илүү байт-аар дүрслэгдэнэ. Учир нь "\0", "/" тэмдэгтүүд UTF-8 мултибайт тэмдэгтээр орж болохгүй тул та үүнийг нулл тэрминатад стринг? гэж үзэж болно. Жишээ нь : Юникод тэмдэгтийн кодуудын битүүд UTF-8 байт урсгалд дараах байдалаар бичигдэнэ. Байтууд битүүд дүрслэл 1 7 0xxxxxxx 2 11 110xxxxx 10xxxxxx 3 16 1110xxxx 10xxxxxx 10xxxxxx 4 21 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
Unicode Marker гэж юу вэ?
Юникод файл-ууд эхэндээ 16-т дахь 2 байт тэмдэгтээр тэмдэглэгддэг. Тэр тэмдэг нь файл доторхи байт дараалалыг заадаг. Ихэнхдээ FEFF- р эхэлдэг боловч FFFE- р эхэлсэн файл байвал энэ нь мөн юникод файл бөгөөд өөр байт дараалалаар үүсгэгдсэн гэсэн үг юм.
Unicode-ийг яаж хэрэглэх вэ?
Тэгэхээр одоо ямар программууд юникодод тулгуурласан эсвэл үгүйг дурдая. 1. Үйлдлийн системүүдийн хувьд. Хэрвээ та виндовс2000/XP тэй бол өөрөө мэдэхгүй хэрэглэж байж ч болох юм. Эдгээр үйлдлийн систем бүрэн юникодод тулгуурласан. Харин Виндовс НТ бүрэн юникодод тулгуурлаагүй боловч хэрэглэх боломжоор нилээд сайн хангаж өгсөн. Виндовс 9X-д юникодод тулгуурлаагүй боловч ашиглах боломтой. Линуксийн хувьд бүрэн суурилаагүй боловч хэрэглэх боломжоор маш сайн хангаж өгсөн. Юникс үйлдлийн системийн хувьд харин харамсалтай нь хэрэглэх боломжгүй байгаа. 2. Хэрэглээний программуудийн хувьд: Виндовсийн орчинд! MS Office 97-оос хойшхи хувилбарууд юникодоор баримт үүсгэх боломжтой. Мөн MS Internet Explorer 4.0-оос хойшхи бүх хувилбарууд, Netscape 4.7 болон түүнээс хойшхи бүх хувилбарууд, Mozilla 0.9-оос хойшхи хувилбарууд, Линуксийн орчинд KDE-2.0-оос хойшхи хувилбарууд бүгд юниkод ашиглах боломжтой. 3. Программчилалын хэлүүдийн хувьд сүүлийн үеийн бүх хэлүүд HML болон Script хэлүүд, C, C++, C#,Java, Visual Basik 5.0-оос хойшхи, Delphi, Perl, Phyton гэх мэтчилэн бүгд юникод хэрэглэх бүрэн боломжтой. Харин зургийн прог-уудын хувьд би сайн хэлж мэдэхгүй байна. Лав Paint Shop Pro 7.0 ?р юникод текст оруулах гэтэл дэмжигдээгүй, харин Animation shop 3.0 бүрэн дэмжигдсэн байсан. Ер нь сүүлийн үеийн программууд бүгд юникодод тулгуурлан бичигдэж байгаа.
Unicode- ийн муу талууд!
Хамгийн эхэнд би мэдээлэл хадгалах зайг хэлэх байна. Та 2 хуучинаасаа 2 дахин их зай хэрэглэх болно. Гэвч өнөөдөр техникийн талаас нь бүрэн хангаж өгч чадаж байгаа. Хоёрдугаарт сүүлийн үед хүмүүс нилээд элбэг зөрчил ярих болсон. XP дээр 2 үсэг болохгүй байна. Вэб хуудсан дээр xxx гэх мэтчилэн тоо гараад байна гэх мэтчилэн. Гэхдээ үүнийг засах боломжтой. Манай нөгөө 2 үсэгийн байрлал өөрчилөгдсөн байгаа учир хүмүүс тэр байрлалд зөв орсон шинэ юникод фонтууд хэрэглэх хэрэгтэй. Вэб хуудасны хувьд хэрэглэгчид хэрвээ MS Internet explorer 4.0 болон түүнээс хойшхи, Mozilla 0.9-өөс хойшхи Netscape 4.7-оос хойшхи хувилбар хэрэглэж байгаа гэж үзвэл миний энэ хуудас шиг юникодоор үүсгэвэл өнөө 2 үсэгийг зөв дүрслэх боломжтойг та харж байгаа байх. Ингээд яаж юникодоор вэб хуудас үүсгэхийг цухас дурдъя. HTML-г юникодоор үүсгэхдээ үсэг бүрийг кодоор нь бичээд ANSI баримт үүсгэж болно. Код нь дараах хэлбэртэй байдаг. Хэрвээ аравтаар бичвэл шууд ⚏⚐ гэх мэтчилэн хэрвээ 16-д бол ⚎⚏ гэх мэтчилэн тэмдэглэдэг. (16-д урд нь x гэсэн тэмдэглэгээ нэмэгдсэнийг анхаар) Энэ нь гар ажиллагаа шаардсан нүсэр ажил тул хялбархан MS Word 97-оос хойшхи хувилбар эсвэл Frontpage ашиглан html үүсгэвэл автоматаар юникодоор үүсгэх болно. Хэрвээ та XP-ийн стандарт драйверыг стандарт юникод фонтуудтай ашигласан бол ямар ч асуудал гарахгүй. Хэрвээ монгол фонт эсвэл өөр гарын драйвер ашигласан бол ө, ү 2 үсэгийг хуучин байрлалаар нь кодлодог. Энэ юу гэсэн үг вэ гэвэл ө, ү 2 үсэг хуучин шигээ буруу харсан э, дээрээ цэгтэй I үсэг шиг хадгалагдана гэсэн үг. Тиймээс html-ээ үүсгэсэний дараа гараар бүх ө, ү-г зөв кодоор нь буюу орлуулна гэсэн үг юм. Энэ нь гэхдээ хэцүү биш л дээ. Том Ө үсгийн код Ө жижиг ө үсгийн код ө том Ү үсгийн код ү жижиг ү үсгийн код Ү байдаг.

No comments:

Post a Comment