sziasztok!
van valami megoldás, hogy win környezetben, ahol a konzol kódlapja 852-es és magyarul ír az ember, ott a perl tudjon ékezese kimenet/bemenetet kezelni? olvasom a hup-on és más helyen erről a témáról kezdett beszélgetéseket, de mintha mindenhol csak félmegoldások lennének (amiket eddig találtam!). az ékezetlen szöveg nem megfelelő megoldás, ha userrel akarok kommunikálni, tehát kell idővel jól működő megoldás. sőt, az OS is kommunikál vissza és ott is fel kell dolgozni valahogy az ékezetes értékeket.
ki miféle megoldással oldja meg ezt a problémát?
- 2194 megtekintés
Hozzászólások
hup :)
--
xterm
- A hozzászóláshoz be kell jelentkezni
> van valami megoldás, hogy [...] a perl tudjon ékezese kimenet/bemenetet kezelni?
Van. Konkrétan mi a problémád?
- A hozzászóláshoz be kell jelentkezni
azt hittem az a sok guglin talált panasz, kérdés, megoldási próbálkozás arra utal, hogy ez tényleg problémás :) emiatt volt kicsit alulparaméterezett a kérdésem, mea culpa.
a probléma az, hogy szeretném, ha win-en futó perl scriptjeim rendesen, magyar ékezetekkel tudjanak írni a konzolra, illetve a konzolra írt sorokat fel tudják olvashatóan dolgozni. egyelőre nem tudom mi lehet a baj, de egy biztos, a sima árvíztűrő tükörfúrógépet sem sikerült még kiíratnom rendesen a konzolra (jelen esetben megelégszem a karakteres felülettel, egyelőre nem akarok ablakokat gyártani)
--
xterm
- A hozzászóláshoz be kell jelentkezni
> a sima árvíztűrő tükörfúrógépet sem sikerült még kiíratnom rendesen a konzolra
Nincs a közelemben win, nem teszteltem:
# a program szöveg kódolása cp1250, a konzolé pedig cp852
use encoding cp1250, STDOUT=>cp852;
print "\nárvíztűrő tükörfúrógép\n";
Futtatás előtt nézz bele a szövegbe valami hexa editorral. Ha az 'á' betű helyén 'C3A1' van, akkor a szöveg UTF8 kódolású; ha 'A0', akkor CP852; ha pedig 'E1', akkor CP1250.
- A hozzászóláshoz be kell jelentkezni
A win-en editáláshoz javaslom a Notepad++ -t , vagy a Komodo Editet, mind a kettőben állítható az elmentett file kódolása.
----
概略情報
- A hozzászóláshoz be kell jelentkezni
köszi! kifelég tökéletesen működik látszólag. viszont nem tudom, hogy vajon csak én nem vágom miképp kell, vagy esetleg más trükk is kell ahhoz, hogy a perl script "befele is értse" a win üzeneteit. arra gondolok pl., hogy pl. egy open segítségével pipe-olok be (jujj, micsoda szó) valamilyen parancs kimenetet, ahol van ékezetes karakter is. kipróbáltam és felsírt, hogy nem 852-es kódlapra veló tartalom is jött... erre is van esetleg valami javaslatod? "kifele" már tudok, ezt köszi! :)
--
xterm
- A hozzászóláshoz be kell jelentkezni
> hogy a perl script "befele is értse" a win üzeneteit.
# http://perldoc.perl.org/encoding.html
use encoding cp1250, STDIN=>utf8, STDOUT=>cp852;
> hogy pl. egy open segítségével
# http://perldoc.perl.org/PerlIO/encoding.html
open fajlocska, '<:encoding(utf8)', '/path/filename.ext';
- A hozzászóláshoz be kell jelentkezni
nagyon szépen köszönöm! időközben pont ezt a részt olvasgatom a doksiból, illetve próbálgatom. úgy nézem ezzel így már meg tudom csinálni idővel azt, amit szeretnék!
--
xterm
- A hozzászóláshoz be kell jelentkezni
Én pl.ékezetes betűket használok...
- A hozzászóláshoz be kell jelentkezni
segítenél azzal, hogy elárulod miképp?
--
xterm
- A hozzászóláshoz be kell jelentkezni
Nem tudom segít-e rajtad, de a konzol kódlapja átváltható. chcp parancs.
- A hozzászóláshoz be kell jelentkezni
ezzel próbálkoztam legelőször. a kódlap nálam cp852-es. próbáltam kiírni rá és "cserélgetéssel" kitalálni, hogy mi lehet a kódlap, amilyen módban ír a perl kimenetet. nem jártam sikerrel. itt kezdtek guglizni többet és csak azt láttam, hogy meglepően sok kérdés van erre és igazi megoldást nem láttam, csak gányolásokat (mint például kiírásonként konvertálgatni minden egyes stringet). azt hittem, hogy majd szépen egyszerűen átállítok valamit (mert pl. a default kódlap nem jó) és máris szép az élet. és roppantul nem :) e végett próbálkoztam itt.
--
xterm
- A hozzászóláshoz be kell jelentkezni
Es a forrast milyen kodlappal irtad ?
Amit nem lehet megirni assemblyben, azt nem lehet megirni.
- A hozzászóláshoz be kell jelentkezni
többféleképp próbáltam, mint alternatív megoldás. (notepad++ a program, amivel a legtöbbször csinálok ilyet). beállítottam a file kódolást pl. utf-8-ra (chcp 65001), elmentettem a filet utf8ban és próba. hibás. elmentettem ansi kódolással és próbálgattam alá belőni chcp-vel kódlapot. még nem sikerült... :/
--
xterm
- A hozzászóláshoz be kell jelentkezni
chcp 65001
Ez az utf-8. Ezt is nézted?
- A hozzászóláshoz be kell jelentkezni
természetesen. éltem a gyanuperrel, hogy a perl a stringeket konvertálja valamire. és ha igen, valszeg pont erre. sajna nem jártam eredménnyel így se...
--
xterm
- A hozzászóláshoz be kell jelentkezni
Konzol fontot átállítottad? Mert bitmap fonttal nem megy az utf-8...
- A hozzászóláshoz be kell jelentkezni
Ne ansi/utf8-al próbálkozz, hanem oem-mel. Igaz, azt a notepad++ nem tudja, de például a far belső editora igen.
- A hozzászóláshoz be kell jelentkezni
most jön a hét naív kérdése: oem mint kódolás? az miféle? sajnálnám, ha emiatt dobnom kéne a notepad++-omat :(
--
xterm
- A hozzászóláshoz be kell jelentkezni
A cp852 kódlapot kell érteni ezalatt. Az iconv tudja például. Notepad++ után átkonvertálhatod. De jobb lesz neked az utf-8 szerintem...
- A hozzászóláshoz be kell jelentkezni
nem lehet valahogy inkább rávenni a perl-t, hogy ha már win32-re megcsinálták, akkor tudjon win32-n szokásos kódlapokkal boldogulni? (úgy értem, hogy valami opció, vagy bármi, csak ne nekem kelljen utólag a file-okat konvertálgatni ide oda, miután megírtam a scriptet, mert ez kényelmetlenségeket szül)
--
xterm
- A hozzászóláshoz be kell jelentkezni
A perl buta. Byte-onként kinyomatja ami a stringben van. Nem konvertál semmit. Amúgy van Text::Iconv is. Azzal is megoldhatod.
- A hozzászóláshoz be kell jelentkezni
köszi a tippet, megnézem azt is mire jó. bár holnaptól pár napig parkolni rakom a dolgot szükséges távollétem miatt, de ígérem megnézem, hátha jó arra, amire szeretném.
különben, ha buta, akkor miért nem működik úgy, mintha tényleg buta lenne? (pl átállítom a konzolt utf8-ra és utf8-ban mentem a filet, majd írok konzolra). nem lehet, hogy mégis konvertálgat valamit?
--
xterm
- A hozzászóláshoz be kell jelentkezni
Jól értem, hogy a perl forrás tartalmaz utf8 stringeket?
Mert ebben az esetben kell az use utf8; ezzel arra utasítod a perlt, hogy a forrást értelmezze utf-8-ként.
update:
Ez nálam (Win XP, Camelbox perl 5.10.0) működik:
use strict;
use warnings;
use utf8;
$s = "öt szép szűzlány őrült írót nyúz";
binmode STDOUT, ":encoding(cp852)";
print $s;
Jótanács és megjegyzés:
A perl alapból azt feltételezi, hogy a forrás ISO-8859-1 kódolással van írva, azaz ha 128-nál nagyobb kódú karaktert lát a forrásban, akkor eszerint értelmezi. Ez abból a szempontból szerencsétlen, hogy a magyar ő és ű betűket nem lehet ezzel a kódolással reprezentálni.
Ellenben az említett use utf8-cal rákényszerítheted, hogy a forrást utf-8-nak lássa, ekkor csak arról kell gondoskodnod, hogy tényleg akként is mentsd el a forrásodat.
Mellesleg a perl nem buta; nagyon is okos a kódolásokkal kapcsolatban. Csak éppen ki kell ismerni és a lehetőségeit ki kell tudni használni. A te helyzetedben nehezítés a Win32 platform, ami jó néhány nemtriviális akadályt gördít a perl elé.
- A hozzászóláshoz be kell jelentkezni
a notepad plus-om alapból nem utf8-ra volt állítva, hanem ansi. de utf8-ra átkódolva se volt igazi az eredmény. úgyhogy ott lesz a kutya elásva, ahol mondod. magyarán, ő feltételez valamit, amit nem tudok. pontosabban nem tudtam, de köszi szépen a kiegészítést. ahogy fentebb egy másik hozzászólásra írtam, már csak egy gondom van. hogy tudom a wines parancssorból érkező bemenetet is a megfelelő formában megemészteni. mert ha a te binmod operálásodat összevetem, ne adj isten kombinálom a kolléga javaslatával, akkor csak az egyikteké lesz jó. mármint attól függően melyiket hagyom benne a kódban. mindenesetre jó tippeket adtatok, próbálok így is keresgélni valami jó leírás után, ahol meg tudom érteni mi az oka a problémámnak és hol találom a helyes megoldást. szóval ettől függetlenül is nagyon köszi!
--
xterm
- A hozzászóláshoz be kell jelentkezni
Control Panel -> Regional and Language Options -> Advanced tab
Mi van beállítva non-unicode programokhoz?
- A hozzászóláshoz be kell jelentkezni
a magyar wineken szokásos magyar van ott beállítva.
--
xterm
- A hozzászóláshoz be kell jelentkezni