Next Previous Contents

12. Sovmestimost'

Sledovat' standartu - eto eshche ne vse. V real'noj zhizni nado obespechit' eshche i obratnuyu sovmestimost'. V nashem sluchae eto oznachaet, chto nashi nastrojki ne dolzhny prepyatstvovat' sozdaniyu dannyh s pomoshch'yu drugih kodirovok, otlichnyh ot standartnoj. |to mogut byt' dannye v Alt (cp866) ili v cp1251. Takzhe dolzhna byt' vozmozhnost' zapuskat' russkoyazychnye programmy iz MS-DOS.

V bol'shinstve sluchaev (krome HTTP) dostatochno obespechit' konvertaciyu dannyh v KOI8-R. Esli my govorim o dannyh s prostoj strukturnoj organizaciej, to eto prosto - smotrite razdel Simvol'naya perekodirovka.

Drugoe delo - dannye s opredelennoj strukturoj. V etom sluchae dejstviya ne tak trivial'ny. YA poprobuyu opisat' standartnye podhody dlya resheniya etoj problemy.

12.1 Sovmestimost' dannyh v MIME formate

MIME format - standartnoe arhitekturno-nezavisimoe predstavlenie dannyh. Pervonachal'no eto predstavlenie dannyh bylo razrabotano dlya pis'mennyh soobshchenij, a sejchas ego ispol'zuyut i v drugih mestah. Standart MIME opredelyaet format, kotoryj otkryt dlya rasshirenij i pozvolyaet podderzhku i rabotu so specificheskimi dannymi. Naprimer, esli ya poslal pis'mo, soderzhashchee MIME ob®ekt video/mpeg tipa (MPEG fajly), moya programma priema elektronnyh soobshchenij avtomaticheski dekodiruet ego i zapustit MPEG proigryvatel'.

Bol'shinstvo UNIX programm, predlagayushchih MIME servis, dlya etih celej ispol'zuyut paket metamail, kotoryj soderzhit nabor utilit i fajlov dannyh dlya raboty s ob®ektami MIME. Neskol'ko fajlov konfiguracii (/etc/mailcap - dlya sistemnoj nastrojki i ~/.mailcap - dlya pol'zovatel'skoj nastrojki) opredelyayut direktivy dlya raboty s ob®ektami MIME razlichnyh tipov.

Poetomu, esli vy poluchili potok MIME dannyh, soderzhashchij tekst v odnoj iz ustarevshih kodirovok, vy mozhete opredelit' sootvetstvuyushchie MIME-direktivy dlya konvertacii takogo teksta v KOI8.

Nizhe perechisleny MIME-zakony, kotorye opisyvayut pravila raboty s obychnymi tekstami i tekstami v richtext formate, ispol'zuyushchih ne osobenno nuzhnye (ustarevshie) kodirovki, opisannye vyshe. Vy mozhete vstavit' eti direktivy v odin iz fajlov konfiguracii MIME.

Obratite vnimanie: |ti direktivy ispol'zuyut paket translit, dlya togo, chtoby proizvodit' samo preobrazovanie. Dlya bolee polnoj informacii ob etoj programme i dlya informacii po perekodirovki smotrite razdel Simvol'naya perekodirovka.


text/plain; translit -t cp1251-koi8.rus < %s; test=test \
    "`echo %{charset} | tr '[A-Z]' '[a-z]'`"  = cp1251; copiousoutput

text/richtext; translit -t cp1251-koi8.rus < %s; test=test \
    "`echo %{charset} | tr '[A-Z]' '[a-z]'`"  = cp1251; copiousoutput

text/plain; translit -t alt-koi8.rus < %s; test=test \
    "`echo %{charset} | tr '[A-Z]' '[a-z]'`"  = cp866; copiousoutput

text/richtext; translit -t alt-koi8.rus < %s; test=test \
    "`echo %{charset} | tr '[A-Z]' '[a-z]'`"  = cp866; copiousoutput

text/plain; translit -t alt-koi8.rus < %s; test=test \
    "`echo %{charset} | tr '[A-Z]' '[a-z]'`"  = alt; copiousoutput

text/richtext; translit -t alt-koi8.rus < %s; test=test \
    "`echo %{charset} | tr '[A-Z]' '[a-z]'`"  = alt; copiousoutput

Dostatochno, eto rabotaet tol'ko v sluchae obychnogo teksta. Binarnye fajly dannyh dolzhny sami otrabatyvat' dannye v razlichnyh kodirovkah (Po krajnej mere, eto dolzhny delat' programmy, sozdavshie ih). Poetomu esli vy poslali fajl Microsoft Word v kodirovke cp1251, to s etim dolzhna razobrat'sya programma, v kotoroj vy chitaete etot tekst (Naprimer MS Word ili Applix Words).

K neschast'yu, dejstvitel'naya situaciya daleka ot ideala. Mnogo programmnyh produktov imeyut sobstvennye idei po povodu togo, kak ispol'zovat' MIME. Do nedavnego vremeni Microsoft Mail ispol'zoval isporchennyj mehanizm raboty s MIME. Hotya i Netscape Navigator/Communicator klient otpravki/priema soobshchenij izvesten tem, chto shlet tekst pis'ma v cp1251, a ego zagolovok v charset=koi8-r kodirovki i naoborot.

Dovol'no chasto sluchaetsya tak, chto te kto posylayut vam pis'ma nepravil'no nastraivayut (ili ne nastaivayut voobshche, a po umolchaniyu stoit cherte-che - primer Outlook) svoi pochtovye programmy. V zagolovkah pisem vmesto windows-1251 chashche vsego stoit iso-8859-1, US-ASCII ili UNKNOWN-8BIT. Dlya ispravleniya poluchaemyh pisem sozdajte fajl ~/.procmailrc so sleduyushchim soderzhaniem (no ya preduprezhdayu vas, chto posle oshibki v ~/.procmailrc vy mozhete poteryat' vsyu vashu pochtu):


:0 fHw
* ^Content-Type: *text/plain; *charset="?(iso-8859-1|US-ASCII|UNKNOWN-8BIT)"?
| formail -i "Content-Type: text/plain; charset=windows-1251"

12.2 Simvol'naya perekodirovka

V Internet mozhno najti mnozhestvo programm, perekodiruyushchih kirillicheskie teksty. Kazhdaya iz nih imeet svoyu izyuminku i otlichaetsya stepen'yu podderzhki kirillicy.

S moej tochki zreniya, utility dolzhny byt' standartnymi. V nashem, chastnom, sluchae takoj "standartnoj" utilitoj yavlyaetsya GNU recode. ( http://www.iro.umontreal.ca/~pinard/recode/).

Naprimer chtoby perekodirovat' iz cp1251 v koi8-r sleduet skazat':

$ recode CP1251..KOI8-R  winfile.txt

Tak zhe shiroko rasprostraneny iconv (vhodit v postavku glibc)

Opyat' zhe cp1251 v koi8-r:

$ iconv -f866 -tKOI8-R -o<outfile> infile

Mozhno vospol'zovat'sya paketom translit. On podderzhivaet mnogo populyarnyh kodirovok i dazhe sposoben sozdavat' TeX fajly (sm. razdel tex ) na russkom yazyke.

V konce koncov sgoditsya obychnyj lynx (cp1251 v koi8-r):

$ lynx -assume_local_charset cp866  file.txt

Dlya drugih programm preobrazovaniya - zaglyanite na stranichku SovInformBureau ili na ftp.funet.fi. Vy dazhe mozhete ispol'zovat' special'nuyu modu dlya emacs (Smotrite razdel Emacs i XEmacs).

12.3 Kirillicheskie imena fajlov v fajlovoj sisteme MS Windows

Windows imeet vozmozhnost' davat' imena fajlov v kodirovke Unicode, poetomu pol'zovateli mogut davat' osmyslennye imena svoim fajlam. Linux, odnako, ne daet polnoj podderzhki dlya Unicode, poetomu esli vy montiruete disk Windows VFAT, to uvidite, chto podobnye imena sostoyat iz voprositel'nyh znakov i prochego musora.

Zdes' ukazan put' kak poluchit' pravil'noe preobrazovanie:

  1. Ubedites', chto vashe yadro skompilirovano s podderzhkoj codepage (v chastnosti s podderzhkoj kodovyh stranic cp866 i KOI8-R - vozmozhno, v vide modulej ls /lib/modules/`uname -r`/fs/nls_*).
  2. Dobav'te sleduyushchie opcii pri vypolnenii mount komandy mount:
    codepage=866,iocharset=koi8-r
    
    ili propishite v /etc/fstab/ primerno takuyu strochku:
    /dev/hda5 /mnt/d vfat noexec,dev,suid,rw,umask=002, codepage=866,iocharset=koi8-r, gid=101 0 0
    
    dlya vyyasneniya podrobnostej smotrite man mount.

Bolee podrobno smotrite Documentation/filesystems/vfat.txt v ishodnikah yadra Linux.

12.4 Podderzhka kirillicy v DOS emulyatore

|to, vidimo, edinstvennyj programmnyj produkt, kotoryj trebuet prisutstviya Alt kodirovki. Osnovaniem yavlyaetsya to, chto Alt- eto rodnaya kirillicheskaya kodovaya stranica DOS. Bol'shinstvo programm, rabotayushchih v DOS s kirillicej, orientirovany na Alt.

Dlya konsol'noj versii (dos) vy dolzhny zagruzit' tol'ko klaviaturu i ekrannyj drajver. Bol'shinstvo drajverov DOS budet prekrasno rabotat'. A. Belikov ispol'zuet rk drajver A. Strahova, kotoryj rabotaet i dlya konsoli, i X versii dosemu. Drugaya al'ternativa - eto r drajver Vadima Kurlyanda (poslednyaya versiya 2.0 etogo drajvera i ego razvitie prekrashcheno). On prekrasno nastraivaetsya i podderzhivaet mnogo kodirovok, v tom chisle Alt i KOI8. Odnako on, veroyatno, ne budet rabotat' dlya X Window (po krajnej mere versiya 1.14 ne rabotaet).

Oba rusifikatora mozhno najti na bol'shinstve Rossijskih Internet arhivah, naprimer, na ftp arhive Kurchatovskogo Instituta YAdernoj Fiziki.

Krome togo, est' patch v http://www.ice.ru/~vitus/misc/, kotoryj pozvolyaet obojtis' bez rusifikatora klaviatury. |tot patch rekomenduetsya v X-ah, tak kak pozvolyaet izbezhat' dvuh klavish pereklyucheniya - odnoj v DOS drugoj - na ostal'nom desktope. Dlya raboty s udalennym dosemu (po telnet/ssh/rsh) patch yavlyaetsya neobhodimym usloviem.

Dlya Xovyh versii dosemu vy dolzhny ustanovit' sootvetstvuyushchij X shrift s 866-oj kodipovkoj. Vzyat' mozhno po adpesam http://www.ice.ru/~vitus/works/x11.html, ili ftp.dosemu.org, ili vzyat' u avtora (eti shrifty sdelal Dima Bolhovityanov) www.inp.nsk.su/~bolkhov

Krome shriftov v kodirovke cp866 tam mozhno najti i drugie kirillicheskie shrifty. Naprimer vga_bul8x16.pcf.gz i vga_bul.pcf.gz imeyut kodirovku MIK (Bolgariya), vga_ruscii_8x16.pcf.gz imeet ukrainskuyu "dosovskuyu" kodirovku ruscii.

Dlya ustanovki shriftov dlya dosemu vy dolzhny

I v zaklyuchenie, vy dolzhny zagruzit' drajver klaviatury. Obratite vnimanie, chto vam ne nuzhny ekrannye drajvery v X okne. Ne vse drajvery budut rabotat', no, po krajnej mere, dva iz nih budut: rk A. Strahova, i cyrkeyb Pete Kvitek - no luchshe vospol'zovat'sya patchem http://www.ice.ru/~vitus/misc/.

12.5 Podderzhka kirillicy v programmah gtk

Esli gtk ne nahodit nuzhnyh shriftov, on rezhet 8-j bit. SHrifty zadayutsya v /etc/gtk/gtkrc.$LANG. Poetomu nuzhno sozdat' fajl gtkrc.ru ili popravit' sushchestvuyushchij. Vnutri dolzhno byt' primerno sleduyushchee (nazvaniya shriftov, razmery i prochie atributy mozhno ispravit' po vkusu, no eti shrifty dolzhny soderzhat' kirillicu v koi8-r):


style "gtk-default-ru" {
       fontset = "-cronyx-helvetica-medium-r-normal--*-*-*-*-*-*-koi8-r,\
                  -cronyx-courier-medium-r-normal--*-*-*-*-*-*-koi8-r,\
                  -cronyx-fixed-medium-r-normal--*-*-*-*-*-*-koi8-r,\
                  -cronyx-times-medium-r-normal--*-*-*-*-*-*-koi8-r"
}
class "GtkWidget" style "gtk-default-ru"

I skopirovat' etot fajl v 'gtkrc.ru_RU.KOI8-R' ili sdelat' symlink:

$ cd /etc/gtk/
$ ln -s  gtkrc.ru  gtkrc.ru_RU.KOI8-R

Podrobnosti sm. www.gtk.org, a takzhe http://www.linux.org.ru/gnome/


Next Previous Contents