Теорія операційної системи

:: Меню ::

Головна
Представлення даних в обчислювальних системах
Машинні мови
Завантаження програм
Управління оперативною пам'яттю
Сегментна і сторінкова віртуальна пам'ять
Комп'ютер і зовнішні події
Паралелізм з точки зору програміста
Реалізація багатозадачності на однопроцесорних комп'ютерах  
Зовнішні пристрої
Драйвери зовнішніх пристроїв
Файлові системи
Безпека
Огляд архітектури сучасних ОС

:: Друзі ::

Карта сайту
 

:: Статистика ::

 

 

 

 

 

Продвижение в инстаграм с реальными подписчиками в Москве | интернет магазин постельного белья и принадлежностей

Представлення текстових даних

  Ви можете прочитати третій знизу рядок таблиці?
— Н, До, І, М... Доктор, у вас криво налагоджено кодування!

Всі використовувані способи представлення текстових даних, так або інакше, зводяться до нумерації символів алфавіту (або безліч символів системи писемності мови, що цікавить нас, яке використовується замість алфавіту — складової азбуки, ієрогліфів і т. д.) і зберігання отриманих цілих чисел нарівні із звичайними числами. Спосіб нумерації називається кодуванням а числа — кодами символів.
Для більшості кодувань мов, що використовують алфавітну писемність (латиниця, кирилиця, арабський алфавіт, єврейська і грецька мови) достатні 127 символів. Найпоширеніша система кодування латиниці — ASCII — використовує 7 біт на символ. Інші алфавіти зазвичай кодуються складнішим чином: символи алфавіту отримують коди в діапазоні від 128 до 255, а коди від 0 до 127 відповідають кодам ASCII. Таким чином, будь-який символ цих алфавітів, у тому числі і в багатомовних текстах, що використовують поєднання національного алфавіту і латиниці, може бути представлений 8-у бітами або одним байтом. Але для японських складових азбук, а тим більше для китайської ієрогліфіки, 255 код явно
недостатньо, і доводиться використовувати багатобайтові кодування. Поширене позначення таких кодувань — DBCS (Double Byte Character Set — набір символів, що кодується двома байтами).
Двох байтів, в принципі, досить, щоб сформувати єдине кодування для всіх сучасних алфавітів і основних підмножин ієроглі-фнки. Спроба стандартізовать таку виставу — Unicode — поки що не має повного успіху. Частково це можна пояснити тим, що потреба в представленні разноязиких текстів в межах одного документа обмежена, крім того, дуже багато старе програмне забезпечення використовує припущення про те, що символ займає не більш за байт. Такі програми не можуть бути легко перетворені для роботи з Unicode.
Використовуються два основні кодування латиниці -- ASCII і EBCDIC (Extended Binary Coded Decimal Information Code), вживана системами As/400, System/370, System/390 і z90 фірми IBM. Для представлення російського варіанту кирилиці існує три основні кодування: альтернативна (відома також як ср866), ср!251 і Koi-8 і ряд менш широко використовуваних (ISO 8892-5 і ін.).
Арифметичні операції над такими "числами" зазвичай безглузді, зате великий сенс мають операції порівняння. Операції порівняння в сучасних процесорах реалізовані як неруйнівне віднімання — ми проводимо ті ж дії, що і при звичайному двійковому відніманні, але запам'ятовуємо не сам результат, а лише прапори знаку, перенесення і рівності результату нулю. На підставі значень цих прапорів визначуваний результат порівняння: якщо різниця дорівнює нулю, порівнювані символи однакові, якщо вона позитивна або негативна, один з символів більше або менше іншого.
Природно, найчастіше ми хочемо інтерпретувати результати посимвольного порівняння як лексикографічне (алфавітне) "більше" або "менше" (для російського алфавіту, "а" менше, ніж "б"). Найпростіше це робити, якщо нумерація символів збігається з їх порядком в алфавіті, але далеко не для всіх поширених кодувань це справедливо.
У кодуванні ASCII (American Standard Code for Information Interchange — Американський стандартний код обміну інформацією), наприклад, всі символи латиниці, цифри і більшість поширених розділових знаків позначаються кодами від 0 до 127, при цьому коди букв розставлені відповідно до латинського алфавіту. У США, як і в інших англомовних країнах, латинський алфавіт використовується в незміненому вигляді, а для передачі звуків, відсутніх в оригінальній латинській мові, застосовується химерна орфографія. Більшість інших європейських алфавітів обходять проблему невідповідності фонетік шляхом розширення набору символів латиниці — наприклад, в німецькій мові додані букви про, а, u і ?. Інші мови мають безліч різних "акцентів" і "діакритичних символів", що розставляються над буквами для вказівки особливостей вимови. Деякі мови, наприклад французький, використовують одночасно і розширення алфавіту, і химерну орфографію. Нерідко зустрічаються і додаткові розділові знаки, наприклад ? і ? у іспанській мові.
Всі символи-розширення в кожному з національних алфавітів знаходяться на певних місцях, але при використанні кодування ASCII для представлення цих символів зберегти цей порядок неможливо — відповідні коди вже зайняті. Так, в кодуванні ISO 8895-1 всі символи латиниці кодуються відповідно до ASCII, а коди розширень більш менш довільно розкидані між 128 і 255. Яскравіший приклад тієї ж проблеми — кодування кирилиці сімейства KOI, в яких символи кирилиці зіставлені фонетично відповідним ним символам латиниці (філе нот фоунд, або, навпаки, esli wy не movete pro^itatx eto ро-russki, smenite kodirovku). Природно, поєднати таке зіставлення і алфавітне сортування неможливо.
Стандартним рішенням в таких випадках є використання для порівняння і лексикографічного сортування проміжних таблиць, в яких для кожної допустимої коди вказаний його номер в лексикографічному порядку. На рівні системи команд процесори цього зазвичай не роблять, але на рівні бібліотек мов високого рівня це здійснюється дуже часто.
При обміні даними між системами, що використовують різні кодування, необхідно враховувати цей факт. Стандартний спосіб такого обліку, вживаний в багатьох кросс-платформенних форматах документів (HTML, MIME), — це повідомлення десь в телі документа (зазвичай на його початку) або в передаваній разом з документом метаінформації про використовувану мову і кодування. Більшість засобів перегляду пошти і документів HTML уміють інтерпретувати цю метаінформацію, тому кінцевий користувач все рідше і рідше стикається з необхідністю самостійно знатися на різних кодуваннях.
Проблеми виникають, коли метаінформація не вказана або, що ще гірше, вказана неправильно. Останнє особливо часто зустрічається при неправильному налаштуванні поштового клієнта у відправника. Для боротьби з такими повідомленнями розроблені навіть спеціальні програми, що застосовують частотний аналіз тексту для визначення реально використаного кодування.
Два основні підходи до представлення форматованого тексту — це мови розмітки і складні структури даних, використовувані в текстових процесорах. Прикладами мов розмітки є HTML, LATEX, troff. У цих мовах звичайний текст забезпечується командами, вказуючими на те, яким шрифтом слід відображувати конкретний фрагмент тексту і як його слід форматувати (наприклад, яка ширина параграфа, чи слід робити перенесення в словах, чи треба вирівнювати текст по лівому або правому краю). Командами є спеціальні послідовності символів того ж кодування, в якому набраний і основний текст.
Тексти, що відформатували таким чином, можуть генеруватися як уручну (наприклад, LATEX орієнтований саме на ручний набір тексту), так і різними автоматизованими засобами.


:: Реклама ::

 

:: Посилання ::


 

 

 


Copyright © Kivik, 2017