Być może ktoś się już spotkał z tą nazwą. Unicode, czyli uniwersalny kod, powstał parę dobrych lat temu.

Może najpierw zaczniemy od przedstawienia powodu dla którego powstał Unikod. Wyobraźmy sobie, że piszemy coś, powiedzmy w edytorze Word. Piszemy w języku polskim z polskimi znakami, ale w jakiejś linijce chcemy zacytować jakieś niemieckie zdanie z niemieckimi literami, a z jeszcze następnym chcemy zacytować zdanie z chińskimi literami. No i jak to mamy zrobić? Gdy wybierzmy czcionkę polską, będziemy mieli polskie znaki, gdy niemiecką niemieckie, już nie wspominając o chińskim, bo to kompletnie całkiem inny system kodowania znaków trzeba zastosować.

Właśnie po to powstał Unikod, a konkretniej mówiąc jest to uniwersalny system znaków, który zawiera w sobie wszystkie znaki świata. Innymi słowy w jednej czcionce możemy napisać wszystkie litery świata.

Jak już wiesz za kodzenie znaków w programowaniu odpowiada typ char(unsigned char), zajmuje on 1 bajt, czyli przyjmuje 255 kombinacji wartości, innymi słowy można w nim zakodować 255 różnych znaków, powstała tablica ASCII(o której wspominałem), która każdemu numerkowi przyporządkowuje alfabetyczny znak i tu jest problem, gdyż 255 znaków to trochę mało, żeby zakodować wszystkie znaki. Przed Unikodem, był różne systemy znaków, dla różnych regionów, np. Środkowo Europejski, który zawierał zestaw polskich znaków, ale już dla języka powiedzmy rosyjskiego, istniał inny system znaków, trzeba było wybrać którego z nich się używa.

No więc teraz przejdźmy do Unikodu, pewnie zastanawiasz się jak w jednym systemie zakodowano wszystkie znaki świata? A więc rzecz jest banalna, otóż zdecydowano rozszerzyć typ kodujący znaki do dwóch bajtów, w programowaniu oznacza to zrezygnowanie z jedno-bajtowego char, a powstanie typu przechowującego znaki o rozmiarze dwóch bajtów. W Unikodzie każdy znak zajmuje 2 bajty, ale dzięki temu zakres 2 bajtów jest tak duży, że można pomieścić wszystkie znaki świata. Ot to cała tajemnica Unikodu.

Unikod oznaczał rewolucję w programowaniu, gdyż zmieniło się kodowanie znaków, od tej pory znaki zaczęły zajmować po 2 bajty, a teoretycznie w Unikodzie mogą nawet 4 bajty.

Unikod jest zbudowany w ten sposób, że pierwsze 128 znaków, pokrywa się ze starą tablica ASCII, czyli numery wszystkich zwykłych znaków nie zmieniają się. Natomiast całkiem zmienia się ułożenie znaków rozszerzonych, w tym także znaków typowych dla polskiego alfabetu, w Unikodzie mają one inne numery niż w ASCII.

Unikod w Dev C++

Dobrze zatem wiemy czym już jest Unikod, przejdźmy zatem do kodowania Unikodu w Dev C++.

Na początek powiedzmy sobie o zmiennej, zastępującej jedno-bajtowy char, zmiennej, której potomkiem w C++ jest dwu-bajtowy typ o nazwie "wchar_t"(w WinAPI jest to WCHAR).

Drugą nowością jest konieczność stosowania operatora "L" podczas inicjalizacji łańcucha znaków, służy on do konwersji z ASCII do Unikodu, zobaczmy jak to wygląda w praktyce.

#include <iostream>

int main(int argc,char* argv[])
{
  wchar_t tekst_unikod[]=L
"Tekst zakodowany w Unikodzie!!"
;
  system(
"PAUSE"
);
  return
0
;
}

Jak widzimy nie jest za specjalnie trudne, dopóki używamy zwykłych znaków do wartości nie większej niż 127, czyli dopóki ASCII pokrywa się z Unikodem.

Polskie znaki w Unikodzie

Wszystko jest pięknie dopóki nie używamy rozszerzonych znaków. Problem polega na tym, że Dev C++ nie wspiera ich, tzn. musimy ręcznie wpisywać numery konkretnych znaków.

Jak chcesz, możesz sprawdzić i w powyższym kodzie, w łańcuchu umieścić jakąś polską literę, kompilator zgłosi błąd o treści: "Illegal byte sequence", czyli "Niedozwolona sekwencja bajtów", a chodzi tu o tą polską niedozwoloną literę. Pozostaje nam ręcznie zmienić numery znaków w łańcuchu, ale do tego trzeba wiedzieć jakie numery w Unikdozie mają polskie litery, oto odpowiedź:P

Numer znaku / Litera
Małe litery:
261 / ą
263 / ć
281 / ę
322 / ł
324 / ń
243 / ó
347 / ś
378 / ź
380 / ż
Duże litery:
260 / Ą
262 / Ć
280 / Ę
321 / Ł
323 / Ń
211 / Ó
346 / Ś
377 / Ź
379 / Ż

Teraz, aby wprowadzić do łańcucha znaków polską literę, trzeba po prostu ręcznie przypisać numery.

#include <iostream>

int main(int argc,char* argv[])
{
  wchar_t tekst_unikod[]=L
"xxka"
;
//załóżmy, że chcemy mieć wyraz Łąka

  tekst_unikod[
0
]=
321
;
//litera Ł

  tekst_unikod[
1
]=
261
;
//litera ą

  system(
"PAUSE"
);
  return
0
;
}

Wejść na stronę:     Ilość osób online:
Prawa autorskie © 2008 crayze. Wszelkie prawa zastrzeżone.
crayze7@gmail.com