Mazovia – 8-bitowe kodowanie znaków przeznaczone do stosowania w systemach operacyjnych MS-DOS i kompatybilnych. Powstało na potrzeby projektowanego polskiego komputera klasy IBM PC o nazwie handlowej Mazovia. Z inicjatywy Andrzeja Gecowa otrzymało ono od 1.IX.1992 status Normy Zakładowej ZN-92 Przetwarzanie informacji. Zestaw znaków graficznych w jednobajtowym kodzie 8-bitowym – tzw. kod MAZOVIA w Spółce Akcyjnej „Mikrokomputery”[1]

Klawiatura maszynistki IPACO/Mazovia
Polskie znaki na klawiaturze IPACO/Mazovia

Było pierwszym rozpowszechnionym kodowaniem używanym dla języka polskiego na komputery domowe. Po wejściu na rynek systemu operacyjnego MS-DOS w wersji 5.0, posiadającego natywną obsługę języków Europy Środkowej (w postaci strony kodowej CP852), popularność Mazovii zaczęła nieco spadać, choć dalej kodowanie to było stosunkowo szeroko używane, między innymi za sprawą archiwów i baz danych posiadanych przez użytkowników. Dopiero od czasu rozpowszechnienia się systemów operacyjnych Windows 3.x, a zwłaszcza Windows 95 i Windows NT 4.0, wykorzystujących kodowanie Windows-1250 i (w różnym stopniu) Unikodu, znaczenie Mazovii zaczęło bardzo szybko maleć (choć wciąż można spotkać aplikacje wykorzystujące to kodowanie).

Spotyka się oznaczenie Mazovii symbolem strony kodowej CP620[2].

Historia edytuj

Mazovia została opracowana w połowie lat osiemdziesiątych XX wieku i użyta po raz pierwszy w wersji systemu operacyjnego komputera Mazovia (klasy PC/XT), produkowanego w Polsce w niewielkich ilościach od 1986 roku. Sam komputer nie był sukcesem, ale kodowanie było popularne przez wiele lat po zaprzestaniu jego produkcji.

Kod Mazovii został zaprojektowany w 1984 roku przez jej głównego programistę, mgr. inż. Jana Klimowicza (ur. 1942) z Instytutu Maszyn Matematycznych (IMM) w trakcie definiowania przez niego założeń na jej peryferia: kartę graficzną o przełączanej podwójnej grafice, klawiaturę z układem maszynistki przełączaną na rosyjski i oryginalny IBM PC oraz drukarkę mozaikową z polskimi czcionkami. Wszystko to miało umożliwić polonizację PC-DOS, języka programowania Basic i podstawowych programów, prowadzoną bez dostępności do kodów źródłowych. W 1986 roku, kiedy okazało się, że produkcja komputera Mazovia 1016 w Polsce nie ruszy, wprowadził on do Narodowego Banku Polskiego (na długo przed jego podziałem na 11 samodzielnych banków) komputery IPACOMazovię zrealizowaną na tajwańskich podzespołach pod jego kierunkiem w firmie IPACO Zbigniewa Jakubasa i Krzysztofa Sochackiego. Formalnie dostawcą była powołana do produkcji Mazovii S-ka Mikrokomputery, która dołączała spolonizowane w IMM oprogramowanie. NBP przyjął unormowania Mazovii jako standard i korzystał ze standardowych pakietów tego oprogramowania, co dało początek szerokiemu rozpowszechnieniu kodu Mazovii w Polsce.

Projekt tablic kodowych Mazovii obejmował wszystkie kraje wschodnioeuropejskie, a dla Bałtów przewidywał wspólną tablicę kodową LILIVEST – Lithuania, Livonia, Estonia – zawierającą wszystkie znaki diakrytyczne używane w tych krajach. Tablica ta nigdy nie została przyjęta w Związku Radzieckim.

Microsoft nigdy nie uznał istnienia tego kodowania i systemy tej firmy (z nielicznymi wyjątkami) nigdy nie posiadały natywnej obsługi Mazovii.

Przez wiele lat na polskim rynku egzystowały firmy zajmujące się wprowadzaniem zmian w firmware kart graficznych i drukarek, dzięki czemu można było uzyskać polskie znaki w tym kodowaniu na ekranie i na wydrukach.

Mazovia obecnie jest natywnie obsługiwana przez FreeDOS, jako strona kodowa CP790 (standardowa) i CP991 (zmodyfikowana: na pozycji 0x9B zawiera symbol złotego „zł” zamiast symbolu centa „¢”, czyli tak jak w karcie graficznej oryginalnego komputera Mazovia 1016).

Zestaw znaków edytuj

Kodowanie Mazovia zostało zaprojektowane z myślą o możliwej wymienności plików z użytkownikami oryginalnych IBM PC używających kodowania CP437, dlatego oparto się na tym kodowaniu i starano się w miarę możliwości tak umieścić polskie litery, by zastąpiły one litery ze znakami diakrytycznymi w jakiś sposób przypominające litery polskie, na przykład Ą w miejscu Å, Ę w miejscu É, Ł w miejscu £. Wszystkie istniejące w oryginale znaki semigrafiki i symbole matematyczne pozostawiono bez zmian.

Kodowanie to pokrywa język polski i, podobnie jak oryginał, język angielski, niemiecki i francuski.

Stosowany w CP991 symbol złotego nie istnieje w unikodzie ani żadnym innym kodowaniu, co sprawia trudności przy konwersji dokumentów używających tego kodowania i zawierających ten znak – należy pamiętać o uprzedniej manualnej konwersji znaku 0x9B (155 dziesiętnie) na lub ewentualnie PLN (PLZ), jeżeli użyty konwerter sam nie dokonuje tej konwersji.

Braki edytuj

Kodowanie to nie zawiera znaków cudzysłowów stosowanych w typografii języka polskiego (ani w obu pozostałych językach).

Tablica kodów (wersja CP790) edytuj

  x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF
0x Znaki kontrolne
1x
2x SP ! " # $ % & ' ( ) * + , - . /
3x 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4x @ A B C D E F G H I J K L M N O
5x P Q R S T U V W X Y Z [ \ ] ^ _
6x ` a b c d e f g h i j k l m n o
7x p q r s t u v w x y z { | } ~ ZK
8x Ç ü é â ä à ą ç ê ë è ï î ć Ä Ą
9x Ę ę ł ô ö Ć û ù Ś Ö Ü ¢ Ł ¥ ś ƒ
Ax Ź Ż ó Ó ń Ń ź ż ¿ ¬ ½ ¼ ¡ « »
Bx
Cx
Dx
Ex α ß Γ π Σ σ µ τ Φ Θ Ω δ φ ε
Fx ± ÷ ° · ² NBSP

ZK oznacza znak kontrolny

Zmiany w porównaniu z CP437 zaznaczone są przy użyciu żółtego tła

Mapowanie na Unikodzie (wersja CP790) edytuj

Poniższa tabela przedstawia kody Unikodu znaków zawartych w kodowaniu Mazovia. Tabela zawiera wyłącznie znaki z górnego zakresu (dolny zakres, czyli pozycje 0x00 ÷ 0x7F jest identyczny z ASCII). Wszystkie kody podane jako szesnastkowe.

Maz. Znak Unikod Nazwa znaku
0x80 Ç 0x00C7 LATIN CAPITAL LETTER C WITH CEDILLA
0x81 ü 0x00FC LATIN SMALL LETTER U WITH DIAERESIS
0x82 é 0x00E9 LATIN SMALL LETTER E WITH ACUTE
0x83 â 0x00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX
0x84 ä 0x00E4 LATIN SMALL LETTER A WITH DIAERESIS
0x85 à 0x00E0 LATIN SMALL LETTER A WITH GRAVE
0x86 ą 0x0105 LATIN SMALL LETTER A WITH OGONEK
0x87 ç 0x00E7 LATIN SMALL LETTER C WITH CEDILLA
0x88 ê 0x00EA LATIN SMALL LETTER E WITH CIRCUMFLEX
0x89 ë 0x00EB LATIN SMALL LETTER E WITH DIAERESIS
0x8A è 0x00E8 LATIN SMALL LETTER E WITH GRAVE
0x8B ï 0x00EF LATIN SMALL LETTER I WITH DIAERESIS
0x8C î 0x00EE LATIN SMALL LETTER I WITH CIRCUMFLEX
0x8D ć 0x0107 LATIN SMALL LETTER C WITH ACUTE
0x8E Ä 0x00C4 LATIN CAPITAL LETTER A WITH DIAERESIS
0x8F Ą 0x0104 LATIN CAPITAL LETTER A WITH OGONEK
0x90 Ę 0x0118 LATIN CAPITAL LETTER E WITH OGONEK
0x91 ę 0x0119 LATIN SMALL LETTER E WITH OGONEK
0x92 ł 0x0142 LATIN SMALL LETTER L WITH STROKE
0x93 ô 0x00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX
0x94 ö 0x00F6 LATIN SMALL LETTER O WITH DIAERESIS
0x95 Ć 0x0106 LATIN CAPITAL LETTER C WITH ACUTE
0x96 û 0x00FB LATIN SMALL LETTER U WITH CIRCUMFLEX
0x97 ù 0x00F9 LATIN SMALL LETTER U WITH GRAVE
0x98 Ś 0x015A LATIN CAPITAL LETTER S WITH ACUTE
0x99 Ö 0x00D6 LATIN CAPITAL LETTER O WITH DIAERESIS
0x9A Ü 0x00DC LATIN CAPITAL LETTER U WITH DIAERESIS
0x9B ¢ 0x00A2 CENT SIGN
0x9C Ł 0x0141 LATIN CAPITAL LETTER L WITH STROKE
0x9D ¥ 0x00A5 YEN SIGN
0x9E ś 0x015B LATIN SMALL LETTER S WITH ACUTE
0x9F ƒ 0x0192 LATIN SMALL LETTER F WITH HOOK
0xA0 Ź 0x0179 LATIN CAPITAL LETTER Z WITH ACUTE
0xA1 Ż 0x017B LATIN CAPITAL LETTER Z WITH DOT ABOVE
0xA2 ó 0x00F3 LATIN SMALL LETTER O WITH ACUTE
0xA3 Ó 0x00D3 LATIN CAPITAL LETTER O WITH ACUTE
0xA4 ń 0x0144 LATIN SMALL LETTER N WITH ACUTE
0xA5 Ń 0x0143 LATIN CAPITAL LETTER N WITH ACUTE
0xA6 ź 0x017A LATIN SMALL LETTER Z WITH ACUTE
0xA7 ż 0x017C LATIN SMALL LETTER Z WITH DOT ABOVE
0xA8 ¿ 0x00BF INVERTED QUESTION MARK
0xA9 0x2310 REVERSED NOT SIGN
0xAA ¬ 0x00AC NOT SIGN
0xAB ½ 0x00BD VULGAR FRACTION ONE HALF
0xAC ¼ 0x00BC VULGAR FRACTION ONE QUARTER
0xAD ¡ 0x00A1 INVERTED EXCLAMATION MARK
0xAE « 0x00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
0xAF » 0x00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
0xB0 0x2591 LIGHT SHADE
0xB1 0x2592 MEDIUM SHADE
0xB2 0x2593 DARK SHADE
0xB3 0x2502 BOX DRAWINGS LIGHT VERTICAL
0xB4 0x2524 BOX DRAWINGS LIGHT VERTICAL AND LEFT
0xB5 0x2561 BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
0xB6 0x2562 BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
0xB7 0x2556 BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
0xB8 0x2555 BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
0xB9 0x2563 BOX DRAWINGS DOUBLE VERTICAL AND LEFT
0xBA 0x2551 BOX DRAWINGS DOUBLE VERTICAL
0xBB 0x2557 BOX DRAWINGS DOUBLE DOWN AND LEFT
0xBC 0x255D BOX DRAWINGS DOUBLE UP AND LEFT
0xBD 0x255C BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
0xBE 0x255B BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
0xBF 0x2510 BOX DRAWINGS LIGHT DOWN AND LEFT
0xC0 0x2514 BOX DRAWINGS LIGHT UP AND RIGHT
0xC1 0x2534 BOX DRAWINGS LIGHT UP AND HORIZONTAL
0xC2 0x252C BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
0xC3 0x251C BOX DRAWINGS LIGHT VERTICAL AND RIGHT
0xC4 0x2500 BOX DRAWINGS LIGHT HORIZONTAL
0xC5 0x253C BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
0xC6 0x255E BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
0xC7 0x255F BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
0xC8 0x255A BOX DRAWINGS DOUBLE UP AND RIGHT
0xC9 0x2554 BOX DRAWINGS DOUBLE DOWN AND RIGHT
0xCA 0x2569 BOX DRAWINGS DOUBLE UP AND HORIZONTAL
0xCB 0x2566 BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
0xCC 0x2560 BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
0xCD 0x2550 BOX DRAWINGS DOUBLE HORIZONTAL
0xCE 0x256C BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
0xCF 0x2567 BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
0xD0 0x2568 BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
0xD1 0x2564 BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
0xD2 0x2565 BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
0xD3 0x2559 BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
0xD4 0x2558 BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
0xD5 0x2552 BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
0xD6 0x2553 BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
0xD7 0x256B BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
0xD8 0x256A BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
0xD9 0x2518 BOX DRAWINGS LIGHT UP AND LEFT
0xDA 0x250C BOX DRAWINGS LIGHT DOWN AND RIGHT
0xDB 0x2588 FULL BLOCK
0xDC 0x2584 LOWER HALF BLOCK
0xDD 0x258C LEFT HALF BLOCK
0xDE 0x2590 RIGHT HALF BLOCK
0xDF 0x2580 UPPER HALF BLOCK
0xE0 α 0x03B1 GREEK SMALL LETTER ALPHA
0xE1 ß 0x00DF LATIN SMALL LETTER SHARP S
0xE2 Γ 0x0393 GREEK CAPITAL LETTER GAMMA
0xE3 π 0x03C0 GREEK SMALL LETTER PI
0xE4 Σ 0x03A3 GREEK CAPITAL LETTER SIGMA
0xE5 σ 0x03C3 GREEK SMALL LETTER SIGMA
0xE6 µ 0x00B5 MICRO SIGN
0xE7 τ 0x03C4 GREEK SMALL LETTER TAU
0xE8 Φ 0x03A6 GREEK CAPITAL LETTER PHI
0xE9 Θ 0x0398 GREEK CAPITAL LETTER THETA
0xEA Ω 0x03A9 GREEK CAPITAL LETTER OMEGA
0xEB δ 0x03B4 GREEK SMALL LETTER DELTA
0xEC 0x221E INFINITY
0xED φ 0x03C6 GREEK SMALL LETTER PHI
0xEE ε 0x03B5 GREEK SMALL LETTER EPSILON
0xEF 0x2229 INTERSECTION
0xF0 0x2261 IDENTICAL TO
0xF1 ± 0x00B1 PLUS-MINUS SIGN
0xF2 0x2265 GREATER-THAN OR EQUAL TO
0xF3 0x2264 LESS-THAN OR EQUAL TO
0xF4 0x2320 TOP HALF INTEGRAL
0xF5 0x2321 BOTTOM HALF INTEGRAL
0xF6 ÷ 0x00F7 DIVISION SIGN
0xF7 0x2248 ALMOST EQUAL TO
0xF8 ° 0x00B0 DEGREE SIGN
0xF9 0x2219 BULLET OPERATOR
0xFA · 0x00B7 MIDDLE DOT
0xFB 0x221A SQUARE ROOT
0xFC 0x207F SUPERSCRIPT LATIN SMALL LETTER N
0xFD ² 0x00B2 SUPERSCRIPT TWO
0xFE 0x25A0 BLACK SQUARE
0xFF NBSP 0x00A0 NO-BREAK SPACE

Rozmieszczenie polskich znaków edytuj

Małe litery
ą 0x86 ł 0x92 ś 0x9E
ć 0x8D ń 0xA4 ź 0xA6
ę 0x91 ó 0xA2 ż 0xA7
Wielkie litery
Ą 0x8F Ł 0x9C Ś 0x98
Ć 0x95 Ń 0xA5 Ź 0xA0
Ę 0x90 Ó 0xA3 Ż 0xA1

Odmiany kodowania edytuj

  • Mazovia 157 – litera „ś” została przeniesiona z pozycji 0x9E na 0x9D (157 w układzie dziesiętnym – stąd nazwa)
  • Fido Mazovia – litera „ć” została przeniesiona z pozycji 0x8D na pozycję 0x87, zajmowaną w CP437 przez literę „ç”. Cele były dwa:
    1. poprawienie zrozumiałości tekstu kodowanego w Mazovii u osób czytających ten tekst przy użyciu kodowania CP437. W CP437 na pozycji 0x8D występuje litera „ì”, która nie dość, że nie kojarzy się z „ć”, to jeszcze jest niezwykle podobna do łacińskiego „i”.
    2. ułatwienie albo wręcz umożliwienie korzystania z polskich znaków diakrytycznych w sieci Fidonet (stąd nazwa kodowania) oraz w połączeniach wdzwanianych do BBS. Większość ówczesnych programów obsługujących modemy i połączenia z BBS-ami pod kodem 0x9E miała polecenie rozłączenia połączenia, co zwykle kończyło sesję.
  • FreeDOS udostępnia stronę kodową 991 – Mazovia ze znakiem złotego. Znak ten występuje na pozycji 0x9B (w miejsce znaku „¢”). Znak złotego formalnie nie istnieje, ani nie ma przyporządkowanego kodu Unikodu, więc używanie tego znaku może powodować trudności podczas konwersji dokumentów.

Przypisy edytuj

  1. Janusz S. Bień: Wybrane standardy przetwarzania tekstów. 1993, s. 8. [dostęp 2016-12-11].
  2. Code Pages Supported by Visual FoxPro. [dostęp 2017-01-04].

Bibliografia edytuj