от Rumen_Yotov(11-11-2004)

рейтинг (22)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

Въведение в уникод
http://software.newsforge.com/article.pl?sid=04/10/27/1628230

Уникод или Универсален Набор от Символи (УНС) е разработен да реши веднъж завинаги проблемите с наличието на много съществуващи набори от символи използвани при писане на текст на различни езици. Той е набор от символи, чиято цел е да бъде над-множество (да обхваща) всички други използвани преди това, като съдържа в себе си всеки символ, използван при писане на който и да е език (включително и много 'мъртви' езици) както също и други символи, използвани в математиката и инженерните науки. Всеки един набор символи може без загуба да бъде преобразуван към уникод, както ще видим по-късно.

ASCII, символният набор, базиран на 7-битови цели числа, беше и все още е много разпространен. Докато неговият капацитет от 128 символа беше достатъчен по времето на неговото създаване през 1960-те години, растящата популярност на персоналните компютри по целият свят направи ASCII неудобен за хората, говорещи и пишещи много различни езици с помощта на много различни азбуки.

По-новите 8-битови символни набори, като фамилията ISO-8859, е способна да представи 256 символа (реално по-малко, тъй като не всички могат да се използват при печат). Това решение бе достатъчно добро за значителна част от практическите нужди, но тъй като всеки символен набор съдържа символи, необходими за писане на няколко езика, не съществуваше начин да се използват в един документ символи от два различни езика, които използват символи от две различни символни набора. В случая с обикновени текстови файлове друг проблем бе как да се накара софтуера автоматично да разпознава кодирането; в повечето случай бе необходима намесата на човек който да посочи кои символни набори са използвани във всеки един файл. Друг един изцяло нов проблем е свързан с използването на азиатските езици при компютрите; не-латинските символи поставиха нови предизвикателства, дължащи се на факта, че някои езици се нуждаят от повече от  256 символа, други пишат от дясно на ляво, както и някои други характеристики които не бяха отчетени от съществуващите стандарти.

Уникод има за цел да разреши всички тези проблеми.

Две организации поддържат уникод стандарта -- Уникод Консорциум (УК) и Международната Организация по стандартизация (ИСО). Имената Уникод и ISO/IEC 10646 са еквивалентни когато се споменава за този символен набор (обаче определението на Уникод Консорциумът за уникод определя стандарт за повече от един единствен набор символи -- той също така включва стандарт за писане на двупосочен текст и други особености, свързани с тези неща).

Уникод кодирания

Уникод определя (относително голям) брой символи и на всеки от тях присвоява уникален номер, уникод-код, чрез който символа може да бъде адресиран. Начина за съхранение на тези кодове на диск или в паметта на компютър е въпрос на кодиране. Най-разпространените Уникод кодирания се означават с UTF-n, където UTF означава Уникод Формат за Трансформация, а  n е число определящо броя битове в основната единица, използвана от кодирането.

Забележете, че Уникод променя предположението, което бе вярно в течение на много години и по-точно че един байт винаги представлява един символ. Както ще видите единичен Уникод символ често се представя от повече от един байт, тъй като броя на Уникод символите надхвърля 256, което е броя различни стойности които могат да се кодират в рамките на един байт. Съответно трябва да се прави разлика между броя на символите и броя на байтовете в даден текст.

Две много разпространени кодирания са UTF-16 и UTF-8. При UTF-16, което се използва от съвременните версии на Microsoft Windows системите, всеки символ е представен от една или две 16-битови (двубайтови) думи. Юникс-подобните операционни системи, включително и Линукс използват друга схема на кодиране, наречена UTF-8, където всеки Уникод символ е представен като един или повече байтове (общо до четири; по-стара версия на стандарта разрешава до шест).

UTF-8 има няколко интересни свойства, които го правят подходящ за тази цел. Първо, ASCII символите се кодират по един и същ начин при ASCII и при UTF-8. Това значи, че всеки един ASCII текстови файл също така е и коректно кодиран UTF-8 Уникод текстови файл, представляващ същият текст. В допълнение когато се кодират в UTF-8 символи, заемащи повече от един байт, символите от ASCII набора никога не се използват. Това гарантира между другите неща, че ако софтуерен код обработва подобен файл като чист ASCII, не-ASCII символите се игнорират или в най-лошият случай се третират като случаен боклук, но те не могат да бъдат прочетени като ASCII символи (което може случайно да доведе до формално коректен, но потенциално проблемни конфигурационни опции в конфигурационен файл или да доведе до други непредвидени резултати). Имайки предвид важността на текстовите файлове в Юникс тези характеристики за важни. Благодарение на начинът по който UTF-8 е разработен, стари конфигурационни файлове, шел-скриптове и дори много голяма част от по-стар софтуер могат да работят коректно с Уникод текст въпреки, че Уникод е разработен години след като те са били създадени.

Как Линукс обработва Уникод

Когато казваме, че Линукс система "може да работи с  Уникод", ние обикновено имаме предвид че са изпълнение няколко условия:

   * Уникод символи могат да се използват в имената на файлове.
   * Основният системен софтуер е способен да работи с Уникод файлови имена, Уникод стрингове под формата на параметри и други.
   * Потребителският софтуер , като текстови редактори може да изобразява и редактира Уникод файлове.

Благодарение на характеристиките на UTF-8 кодирането, ядрото на Линукс, най-вътрешната и намираща се на най-ниско ниво част от операционната система може да работи с Уникод файлови имена, без дори да се налага потребителя да 'казва' че се използва UTF-8. Всички символни стрингове, включително файлови имена се обработват от ядрото по такъв начин, че за него те изглеждат само като стрингове от байтове. По този начин няма значение и не е необходимо да знае дали двойка последователни байтове трябва логически да се обработят като два символа или като един символ. Единственият риск за 'излъгване' на ядрото ще бъде, например име на файл което съдържа многобайтов Уникод символ, кодиран по такъв начин, че един от използваните байтове да представлява слеш (/) или някакъв друг символ, който има специална употреба в имената на файлове. За щастие както вече отбелязахме, UTF-8 никога не използва ASCII символи за кодиране на многобайтови символи, така че нито 'слеш' нито някой друг специален символ може да се появи като част от име и следователно не съществува риск свързан с използване на Уникод в имена на файлове.

Файловите типове, които не са били предвидени за работа с Юникс-и, като тези използвани от Windows са по-различни, както ще видим по-нататък.

Потребителските програми (в Линукс) използват така наречената информация от локала (locale information) за да могат правилно да  преобразуват байтовете към символи както и за други задачи, като определяне езика за съобщения на дадено приложение и форматите за дата и време. Това се определя от стойностите на специални променливи от обкръжението. Коректно написани приложения трябва да могат да използват UTF-8 стрингове вместо ASCII стрингове автоматично, ако локала го посочва.

Повечето приложения за краен потребител когато да работят с Уникод символи включително приложения, написани за десктоп-средите GNOME и KDE, фамилиите продукти OpenOffice.org и Mozilla и други. Обаче, Уникод е повече от само един символен набор -- той въвежда правила за комбиниране на символите, двупосочно писане, и други допълнителни възможности, които не винаги се поддържат от масово-използваният софтуер.

Някои програми за команден ред имат проблеми с многобайтовите символи. Например, 'tr' винаги предполага, че един символ се представя като един байт независимо от локала. Също така, използваните шелове като 'Bash' (и други програми използващи 'getline' библиотеката както изглежда) често се объркват когато многобайтови символи се вмъкват в команден ред и след това се изтриват чрез 'Backspace' или 'Delete' клавишите.

Ако използването на Уникод Ви звучи примамливо, можете да прочетете (друга статия) и да научите как да инсталирате и използвате Уникод в Линукс.

Постоянно актуализирана версия на настоящата статия можете да намерите на страницата на автора.
Date   2004.11.01 3:00
Author   StoneLion
Topic  

Michał Kosmulski е студент във Варшавския университет и Варшавския университет за технологии.

Връзки:
  1. "ISO-8859 family" - http://en.wikipedia.org/wiki/ISO_8859
  2. "Unicode Consortium" - http://en.wikipedia.org/wiki/Unicode_Consortium
  3. "International Organization for Standardization" - http://en.wikipedia.org/wiki/International_Organization_for_Standardization
  4. "Unicode" - http://en.wikipedia.org/wiki/Unicode
  5. "ISO/IEC 10646" - http://en.wikipedia.org/wiki/ISO_10646
  6. "UTF-16" - http://en.wikipedia.org/wiki/UTF-16
  7. "UTF-8" - http://en.wikipedia.org/wiki/UTF-8
  8. "updated version of this article" - http://hektor.umcs.lublin.pl/~mikosmul/computing/articles/linux-unicode.html
  9. "Michał Kosmulski" - http://hektor.umcs.lublin.pl/~mikosmul/
 10. "Warsaw University" - http://www.uw.edu.pl/en/
 11. "Warsaw University of Technology" - http://www.pw.edu.pl/english/index.html


<< Инсталиране на TrueType шрифтове в Gnome | Възможности за сертификатната измама в X.509 >>