K dov n znak
This presentation is the property of its rightful owner.
Sponsored Links
1 / 36

K ódování znaků PowerPoint PPT Presentation


  • 59 Views
  • Uploaded on
  • Presentation posted in: General

K ódování znaků. vnitřní reprezentace znaků v paměti počítače pomocí čísel zobrazení mezi písmeny (pro lidi) a čísly (pro počítače) Zpočátku jen pro angličtinu, tj. stačilo 7 bitů ASCII - A merican S tandard C ode for I nformation I nterchange řídicí znaky písmena anglické abecedy

Download Presentation

K ódování znaků

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


K dov n znak

Kódování znaků

  • vnitřní reprezentace znaků v paměti počítače pomocí čísel

  • zobrazení mezi písmeny (pro lidi) a čísly (pro počítače)

  • Zpočátku jen pro angličtinu, tj. stačilo 7 bitů

  • ASCII - American Standard Code for Information Interchange

    • řídicí znaky

    • písmena anglické abecedy

    • znaménka (<>;:"/, apod.)


Ascii

ASCII

American Standard Code for Information Interchange


Neviditeln znaky ascii

Neviditelné znaky ASCII

  • Prvních 32 znaků tabulky – řídicí znaky

  • Původně pro řízení dálnopisu nebo tiskárny Nejčastěji používané speciální znaky:

  • SPC space, mezera, „prázdný znak“

  • HT Horizontal Tab - tabulátor

  • LF Line Feed- odřádkování

  • CR Carriage Return - návrat vozíku

  • BSBack Space


Ascii za tek tabulky

ASCII – začátek tabulky


Ascii nesta k dov str nky

ASCII nestačí - kódové stránky

  • jen 7 bitů, pro angličtinu bez problémů

  • osmý bit se využil „živelně“ pro národní abecedy – různé znakové sady, např. čeština:

    • ISO Latin2,

    • Windows 1250,

    • Kamenických, ...

  • Prvních 7 bitů VŽDY stejné, tj. ASCII

  • „code page”, česky:

    • kódová stránka, kódování, znaková sada


Norma iso 8859

Norma ISO 8859

  • Latin-1

    • zaopatří většinu západoevropských jazyků

    • přidáno 96 písmen

    • kódování Windows-1252 dalších 27

  • Latin-2 –

    • pro středoevropské a východoevropské jazyky (ne azbuka)

    • jen částečně kompatibilní s Latin-1

  • Latin-3, Latin-4, Latin-5, … Latin-10


K dov str nky nesta unicode

Kódové stránky nestačí - Unicode

  • Problémy:

    • Více znaků v 1 dokumentu

    • Převod mezi kódovými stránkami

    • Přenositelnost textů

  • Unicode

    „The Unicode Standard is a character coding system designed to support the worldwide interchange, processing, and display of the written texts of the diverse languages and technical disciplines of the modern world. In addition, it supports classical and historical texts of many written languages.“


U nicode standard

Unicode Standard

  • Zodpovědný za interpretaci znaků

  • Nedefinuje grafickou podobu znaků

  • Prvních 128 znaků je ASCII

  • Prvních 256 znaků ze sady ISO Latin 1

  • Jednoznačné pojmenování každého znaku

  • Znaky se mohou (jenom) přidávat – stabilita


How many different characters

How Many Different Characters?

a A à á â ã ä å ā ă ą

a aaaaaaaaa a


Unicode

Unicode

  • Každému znaku je přiřazen

    • název

    • číselný kód, tzv. „code point“, např. A je U+0041

  • Celkem 1 114 112 znaků s kódy 016 až 10FFFF16

  • 17 částí, každý o velikosti 216

  • První část = Basic Multilingual Plane (BMP)

    • obsahuje znaky běžně používaných abeced


U nicode a jeho k dov n

Unicode a jeho kódování

  • UTF-32

    • všechnyznakyve 4 bytech

    • Výhoda: stejná délka všech znaků

    • Nevýhoda: plýtvání místem

  • UTF-16

    • kompromismeziúsporností a kompaktností

    • nejčastějšíznaky(BMP) ve2 bytech, ostatníve4


Utf 8

UTF-8

  • Unicode Transformation Format-8.

  • ASCII znaky (code points 0-127) mají stejný kód,

    • tj. jen v 1 bytu, (v Americe si toho vůbec nevšimnou)

    • ostatní znaky ve 2 až 6 bytech


Utf 8 p klady

UTF-8 příklady


K dov n konverze

Kódování, konverze

  • Každá aplikace pracující s textem musí bezpodmínečně vědět, v jakém kódování je text zapsán

  • Jinak se kódy špatně interpertují - i zobrazí

  • Konverze mezi kódováními

    • existuje-li příslušný znak v obou kódováních – OK

    • neexistuje-li – zobrazí se např. jako ?, nebo �, nebo jiný znak, nebo se vypíše kód, ...

  • příkaz iconv


Nastaven k dov n locale s

Nastavení kódování - locale(s)

  • je soubor jazykových, národních a kulturních pravidel, jako jsou znaková sada, formáty data, času a měny, pravidla pro abecední třídění, a také jazyk zpráv a uživatelského prostředí vůbec.

  • Locale je třeba napřed nastavit v shellu.

  • Důležité proměnné prostředí pro správné zobrazení češtiny:

  • LC_ALL – nastaví všechno najednou

  • LC_kategorie – nastaví konkrétní kategorii

  • LANG – použije se, není-li nastavena kategorie


Lc kategorie

LC_kategorie

LC_kategorienastavují jednotlivé kategorie.

Standardníjsou tyto:

  • LC_COLLATE (pravidla třídění),

  • LC_CTYPE (vlastnosti znaků, malá a velká písmena),

  • LC_MONETARY (formát měny),

  • LC_NUMERIC (formát čísel),

  • LC_TIME (formát data a času),

  • LC_MESSAGES (jazyk zpráv a uživatelského rozhraní).


Jak nastavit utf 8

Jak nastavit UTF-8

  • Příkaz less

    • proměnná LESSCHARSET

      • hodnota: "utf-8" (místo "ascii", "latin1", ...)

  • Perl

    • proměnná PERL_UNICODE

      • hodnota: SAD


Prom nn perl unicode

Proměnná PERL_UNICODE

  • Musí být nastavena na SAD:

  • S … STDIN, STDOUT i STDERR budou v UTF-8

  • D … všechny vstupy i výstupy budou otevřeny v UTF-8

  • A … prvky pole @ARGV se interpretují jako řetězce v kódování UTF-8

  • Lze zadat i přepínačem -C na 1. řádce skriptu:

#!/usr/bin/perl -CSAD

use utf8;


Nastaven prom nn prost ed v shellu

Nastavení proměnné prostředí v shellu

  • bash:

export VARIABLENAME="value"

bez mezer!

  • csh/tcsh:

setenv VARIABLENAME "value"

  • Zobrazení hodnoty proměnné:

echo $VARIABLENAME

echo $SHELL

echo $LC_ALL


Nastaven prom nn prost ed v shellu1

Nastavení proměnné prostředí v shellu

  • bash:

export LESSCHARSET="utf-8"

bez mezer!

  • csh/tcsh:

setenv LESSCHARSET "utf-8"


Nastaven locales

Nastavení locales

[email protected]

  • Obecný formát hodnot:

jazyk[_teritorium[.znaková_sada]][@modifikátor]

  • Pro češtinu:

  • Nebo alias:

cs_CZ.ISO-8859-2

cs_CZ.UTF-8

czech

  • bash:

export LC_ALL="cs_CZ.ISO-8859-2"

  • csh/tcsh:

setenv LC_ALL "cs_CZ.ISO-8859-2"


Dal p klady locales

Další příklady locales

[email protected]

  • Obecný formát hodnot:

jazyk[_teritorium[.znaková_sada]][@modifikátor]

  • Pro angličtinu

  • jich je několik, např:

en_US.UTF-8

  • en_NZ.UTF-8

  • Pro němčinu:

de_DE.UTF-8

[email protected]


Probl my s e tinou

Problémy s češtinou

Je-li kódování nastaveno „špatně“, potom:

  • Znaky s diakritikou se ne vždy považují za alfanumerické znaky

  • Vadí to nejen při zobrazování, ale i při

    • třídění

    • vyhodnocování regulárních výrazů (později)

    • převodu na velká / malá písmena

    • ...

  • Je třeba použít use locale;

  • Nefunguje dobře pro UTF-8 !!! ... viz dále


Otev r n soubor

Otevírání souborů

2 způsoby

  • pro čtení (vstupnísoubor)

    open(VSTUP,“pearl.txt");

    Lzeotevřítvícesouborů pro čtení.

  • pro výpis (výstupnísoubor)

    open(OUT,">/export/home/martin/prijmeni.out");

    open(OUT,">>/export/home/martin/prijmeni.out");

    Lzeotevřítvícesouborů pro výpis.


Unicode1

Unicode

Třeba explicitně uvést, že pracujeme v kódování UTF-8:

#!/usr/bin/perl -CSAD

use utf8;

Otevírání textových souborů v kódování UTF-8:

  • open(VSTUP, "<:utf8" , "pearl.txt");

  • open(OUT, ">:utf8", "prijmeni.out");

  • open(OUT, ">>:utf8", "prijmeni.out");

  • Je-li nastaveno#!/usr/bin/perl -CSAD nebo proměnná PERL_UNICODE, není třeba 2.argument


  • Ovlada souboru filehandle

    Ovladač souboru (filehandle)

    • Standardní – vždy k dispozici

      • STDIN

      • STDOUT

      • STDERR – výpischyb

    • Ostatní je třebaexplicitněotevřítpomocí funkce

      open([ovladačsouboru],[mode],[jménosouboru]);

    • Ovladačsouboru se tradičněpíševelkýmipísmeny

    • Zavíránísouboru: close([ovladačsouboru]);


    Testov n soubor

    Testování souborů

    • Otevření souboru může být problematické => testy

    -rsoubor lze číst

    -wdo souboru lze zapisovat

    -xsoubor je spustitelný

    -esoubor existuje

    -fjde o soubor

    -djde o adresář

    -zsoubor má nulovou délku

    -ssoubor má nenulovou délku

    if(! (–e "soubor"))

    {

    open(S,">soubor")

    }

    if(-s "vstup" and -r "vstup")

    {

    open(V,"vstup")

    }


    P kaz die

    Příkaz die

    • Perlovský idiom:

    • open(SOUBOR,"s.txt") or die "Soubor s.txt nejde otevřít.";

    • dieukončí program a vypíše hlášku na STDERR.

    • Co to znamená? Umíte to zapsat jinak?

    • Speciální proměnná $! pro výpis chybových hlášek:

    • open(SOUBOR,"s.txt") or die "Problém: $!\n";

    • Když se neotevře soubor, vypíše se např.

    • Problém: Permission denied.


    Ten ze souboru

    Čtení ze souboru

    Příklad

    open(VSTUP,"pearl.txt");

    $prom = <VSTUP>; # do $prom se uloží 1. řádek ze souboru "pearl.txt"

    my $cislo_radku = 1;

    while(<VSTUP>) # totéž jako while($_ = <VSTUP>)

    {

    print $cislo_radku++, " ", $_;

    }

    close VSTUP;


    Z pis do souboru

    Zápis do souboru

    • Do příkazu print napíšeme ovladač souboru, do kterého se má zapisovat

    • print VYSTUP "toto se zapíše do výstupního souboru.\n";

    • Nezapíše-li se ovladač, zapisuje se do STDOUT

    • print "toto se zapíše na standarní výstup.\n";

    • totéž jinak (většinou):

    • print STDOUT "toto se zapíše na standarní výstup.\n";

    Tady není čárka !!!


    Z pis do v ce soubor ne najednou

    Zápis do více souborů (ne najednou)

    • Lze otevřít více souborů a zapisovat pokaždé do jiného

      • např. ladicí tisky na STDOUT nebo do zvláštního jiného souboru (např. LOG), ostatní výstupy do výstupního souboru

    open(LOG,">log.txt"); open(VYSTUP,">ven.txt");

    print LOG "toto se zapíše do souboru log.txt.\n";

    print VYSTUP "toto se zapíše do souboru ven.txt.\n";

    • Ale máme i příkaz select:

    • select LOG;

    • print "toto se zapíše do souboru log.txt, ne na STDOUT!\n";


    Parametry souboru

    Parametry souboru

    • Pole @ARGV

    • Při spouštění programu se parametry píšou za jméno souboru

    • Příklad: přepis souboru s očíslovanými řádky

      • program, který přečte všechny zadané soubory a vypíše je tak, že každý řádek předchází jeho pořadí

      • nevíme předem, kolik bude souborů

    • Spuštění programu:

    • ./pocitej.perl soubor_1 soubor_2 ... soubor_n

    • parametry jsou odděleny mezerami


    P klad s polem @argv

    Příklad s polem @ARGV

    foreach $s (@ARGV)

    {

    my $cislo_radku = 1;

    open(VSTUP, $s) or die "Nelze otevřít soubor $s\n";

    open(VYSTUP, ">${s}.out") or die "Nelze otevřít ....";

    print "---- $s ----\n";

    while($prom = <VSTUP>)

    {

    print VYSTUP $cislo_radku++, " ", $prom;

    }

    }


    Pou it @argv

    Použití @ARGV

    • Jméno souboru, který se má zpracovat (vstupní soubor)

      • může jich být víc

    • Jméno souboru, který má být výsledkem (výstupní soubor)

      • i těch může být víc

    • Číselné parametry – př.: sečíst čísla od N do M

    • Příklad : jednoduchá kalkulačka


    Perl z p kazov ho dku

    Perl z příkazového řádku

    • Krátké prográmky na jedno použití není třeba uchovávat, lze je spustit přímo z příkazové řádky

    • perl volba

    • Volby

      • -e "příkaz(y)"provede se příkaz

      • -npříkaz se obalí cyklem while

      • -pjako -n, navíc se řádky vytisknou na STDOUT

      • -vvypíše verzi Perlu

    perl -pe "s/\r//" W_soubor.txt > U_soubor.txt

    perl -ne "print if/aby/"


    Perl z p kazov ho dku unicode

    Perl z příkazového řádku - Unicode

    • Další volba

      • -Cpro práci s kódováním UTF-8

      • stejné jako pro první řádku skriptu – hodnota SAD

    perl -CSAD -pe "use utf8; ..."

    perl -CSAD -ne "use utf8; print if/aby/" soubor.txt

    perl -Mlocale-ne "print if/aby/" soubor.txt


  • Login