Символно кодиране: Разлика между версии

Изтрито е съдържание Добавено е съдържание
м http(s) линк- в [] скоби
без болд
Ред 20:
== Кодова единица ==
[[Файл:KB Dubeolsik for Old Hangul (Microsoft).svg|мини|422x422px|[[Символен тип|Символ]] / знак]]
'''Терминология, свързана с кодовите единици:'''
* '''''Символът (знакът)''''' е минимална единица текст, който има семантична стойност.
* '''''Наборът от символи''''' представлява колекция от символи, които биха могли да бъдат използвани от различни езици.
 
Пример: ''Латинският набор от символи'' се използва от ''английския език'' и повечето ''европейски езици'', въпреки че ''гръцкият набор от символи'' се използва само от ''гръцкия език''.
* '''''Кодираният набор''''' '''''от символи''''' е набор от символи, където всеки символ получава уникален номер.
 
* '''''Кодовата точка''''' е стойност, която може да се използва в '''''кодиран набор от символи'''''. '''''Кодовата точка''''' е 32-битов целочислен тип данни, където по-ниските 21 бита представляват валидна стойност на кодова точка и горните 11 бита са 0.
 
'''''Кодовата единица''''' е последователност от битове, използвана за кодиране на всяка отделна символна единица, която е част от репертоар в рамките на всеки вид кодиране.
 
'''Символен репертоар (абстрактен списък от символи):'''
 
'''''Репертоарът от символи''''' предстсвлява абстрактен списък от повече от един милион открити скриптове, включително ''латински, кирилица, китайски, корейски, японски, иврит и арамейски символи.''
 
Други символи като музикалните ноти например, също са включени в символния репертоар. И двата формата – [[Unicode]] и [[GB18030]] имат символен репертоар. Когато нови символи са добавени към един формат, друг формат ги добавя също, с цел да се поддържа подобие на първия.
Ред 43:
* Кодова единица в [[UTF-32]] формата се състои от 32 бита.
 
'''''Пример за кодова единица:''''' Представете си един '''''[[Низ|String]]''' (бълг.: '''низ''' от символи)''), който съдържа „abc“, последван от [http://www.charbase.com/10400-unicode-deseret-capital-letter-long-i [Deseret LONG I]], който е представен с две символни стойности. Този символен низ съдържа четири знака, четири кодови точки, но като цяло '''''пет кодови единици'''''.
 
За да изразите символ (знак) в Unicode, за шестнадесетичната стойност се добавя е началото представка на низа U +. Валидният обхват на кодовата точка за формата Unicode варира от U + 0000 до U + 10FFFF, включително.
Ред 55:
 
|
'''Символ'''
 
|
'''Unicode кодова точка'''
 
|
'''Релефен символ'''
 
|-
Ред 98:
|}
 
'''Връзката между кодовите точки и кодовите единици:'''
 
Кодовата точка е символ (знак) и се представя с една или повече кодови единици в зависимост от формата на кодирането.
Ред 105:
 
Броят на кодови единици изисква да бъде съпоставен на кодова точка в зависимост от формата на кодиране:
* '''''UTF-8'''''
Множеството кодови единици на една кодова точка са често срещани в UTF-8, поради по-малките размери на кодовите единици. Кодовите точки ще бъдат представени с една, две, три, или четири кодови единици.
* '''''UTF-16'''''
UTF-16 кодовите единици са два пъти по-големи от 8-битовите кодови единици. Ето защо, всички кодови точки със скаларна стойност по-малка от 10 000 U + е кодирана с единична кодова единица.
 
За кодовите точки със скаларна стойност U + 10 000 или по-висока, са необходими две кодови единици за една кодова точка. За тези двойки кодови единици съществува уникален термин в UTF-16: [[Unicode сурогатни двойки]].
* '''''UTF-32'''''
32-битовата кодова единица, използвана в UTF-32 е достатъчно голяма, за да позволява на всяка кодова точка да се кодира като единична кодова единица.
* '''''GB18030'''''
Множество кодови единици на една кодова точка са често срещани в GB18030, поради по-малките кодови единици. Кодовите точки ще бъдат съпоставени с една, две или четири кодови единици.
<references group="http://docs.oracle.com/javase/tutorial/i18n/text/terminology.html" />
 
== Уникод кодиращ модел ==
'''[[Уникод]]''' или ''Универсален набор от символи'' (на английски: ''Unicode'') и паралелния му стандарт [[ISO/IEC 10646 Universal Character Set]], заедно представляват модерна единна система за символно кодиране. Вместо символите да се свързват директно в байтове, те поотделно определят какви символи са свободни, тяхното подреждане, как тези числа са кодирани като серия от „кодови единици“, и как накрая как тези единици са кодирани като поток от байтове. Идеята за това разлагане е да се създаде универсален набор от символи, които могат да бъдат кодирани по различен начин. За да се опише този модел правилно, трябва да се въведат по-точни методи от „набор от символи“ и „символно кодиране“. Методите, които се използват в съвременния модел са:
 
''Символното съдържание'' е пълният набор от абстрактни символи, които една система поддържа. Съдържанието може да бъде затворено, т.е. не са позволени допълнения без създаване на нови стандарти (както е направена [[ASCII]] таблицата), или да бъде отворено, позволявайки допълнения. Символите в дадено съдържание отразяват решенията как да се разделят системите за писане на основни информационни единици. Основните варианти на латински, гръцки и кирилица могат да бъдат разделени на букви, цифри, пунктуационни знаци и няколко специфични символи като празно място, които могат да бъдат подредени в прости линейни последователности, които се показват в реда, в който се четат. Дори с тези азбуки, диакритични знаци представляват усложнение: те могат да се разглеждат или като част от отделен символ, който съдържа буква и диакритичен символ, или като отделни символи. Основният позволява много по-проста текстова обработка, а последният позволява да бъде използвана буквена/ диакритична комбинация. Лигатурите създават същите проблеми. Други системи за писане като арабската азбука или иврит са представени като по сложни символни съдържания, поради необходимостта да се акомодират неща като двупосочен текст и знаци, които са свързани по между си по различни начини.
Ред 143:
Един символен модел, няколко кодирания. Много стандарти в символните кодирания, като тези в ISO 8859 сериите използват един бит за даден символ и кодирането се извършват директно, тоест позицията на символа отговаря на кодирания символ. За пример буквата А в ISO 8859 – 1 кодиран символен модел е 65-та подред (започващ от 0) и кодирана е представена на компютъра като байт използващ стойността 65. За ISO 8859 – 1 това не се променя.
 
За Уникод обаче нещата не са директни. Всъщност кодовата точка за буквата à в модела Уникод е винаги 225 (в десетична бройна система), в UTF-8 буквата е представена в компютъра в два бита. В допълнение в Уникод има различни на брой начини за кодиране на един и същ символ. За пример буквата à може да бъде представена като 2 бита в едно кодиране и като 4 байта в друго. Кодиращите форми, които могат да се използват в Уникод, са UTF-8, UTF-16 и UTF-32.<gallery>
 
</gallery>
 
== Превод на кодирането ==
Като резултат от многото '''кодиращи''' методи (и нуждата от съвместимост с архивираните данни), които се използват, много компютърни програми са разработени, за да превеждат данните между различните кодиращи методи – това е своеобразно декодиране.
 
=== Междуплатформени програми ===
Line 179 ⟶ 177:
* [http://www.w3.org/International/articles/definitions-characters/]
* [http://www.joelonsoftware.com/articles/Unicode.html www.joelonsoftware.com]
* [http://www.w3.org/International/articles/definitions-characters/] www.w3.org]
* [http://www.sitepoint.com/guide-web-character-encoding/ The Definitive Guide to Web Character Encoding]
* [http://betterexplained.com/articles/understanding-big-and-little-endian-byte-order/ Understanding Big and Little Endian Byte Order]