python kimenet = utf-8

Hi,
most irtam elso python progimat, es nem leltem sehol sem, hogy mi szabalyozza a kimenet karakter kodolasat.
beolvasok fajlokat, egyszerre kettot es a bennuk levo szavakat hasonlitom. a fajlok kodolasa utf-8 viszont, hol utf-8 a kimenet, hol iso8859-2.
ez mitol fugg, mert a progi print -l irja a kimenetet es en ezt iranyitom egy fajlba fajlba.

elore is koszi
zsomi

Hozzászólások

Én innen lestem ki anno: http://evanjones.ca/python-utf8.html

Két kis példát is ide teszek neked. mind a kettő utf-8 kódolású txt-t ISO-8859-2 kódolású txt-re alakít. Parancssori paraméterként a forrás és cél fájlnevet kell megadni.


#! /usr/bin/env python                                | #! /usr/bin/env python
# -*- coding: utf-8 -*-                               | # -*- coding: utf-8 -*-
                                                      |
import sys                                            | import sys
reload(sys)                                           | import codecs
sys.setdefaultencoding('utf-8')                       |
                                                      | print sys.argv
print sys.argv                                        | f1=sys.argv[1]
f1=sys.argv[1]                                        | f2=sys.argv[2]
f2=sys.argv[2]                                        |
                                                      | fsR = codecs.open( f1, 'r', 'utf-8')
fsR = open(f1, 'r')                                   | fsW = open(f2, 'w')
fsW = open(f2, 'w')                                   |
                                                      | while 1:
                                                      |     fb= fsR.readline()
while 1:                                              |     if fb== "":
    fb= fsR.readline()                                |         break
    if fb== "":                                       |     fsW.write(fb.encode("ISO-8859-2"))
        break                                         |
    fsW.write(fb.encode("ISO-8859-2"))                | fsR.close()
                                                      | fsW.close()
fsR.close()                                           |
fsW.close()                                           |

Én is példákból tanulok a legkönnyebben.
--
не закурится!

Szervusztok!
Most próbálgatom a pythont, és szép nehézségbe ütköztem elég gyorsan. Próbálom az utf-8 kódolást generálni, de csak elég furcsán sikerül.
Beírom az első vagy második sorba, hogy

# -*- coding:Utf-8 -*-

majd próbaként a klasszikust:

print "Árvíztűrő tükörfúrógép"
print "árvíztűrő tükörfúrógép"

A futtatott eredmény érdekes: a nagy kezdőbetűjű változat szépen olvasható, míg a kisbetűvel kezdődő szópár minden ékezetes betűje szép krikszkraksz. Nem értem. Mert ha mindkettő rossz lenne, akkor oké. Ez nekem magas… Ahogy próbálgatom úgy tűnik, hogy bármilyen ékezetes szót nagy ’Á’-val, ’Ő’-vel kezdek, akkor szépen kiírja az összes ékezetet, egyébként pedig hieroglifa az egész.
Találkoztatok már ezzel a gonddal? Mit kéne még beírnom a programba? Vagy lehet, hogy a windóz a hibás, amin fut?
Előre is köszönöm, ha megosztjátok velem tudástokat!
Jó hétvégét!
Valek

Python 2 vagy 3? (Mondjuk egyikhez sem értek sajnos, de nagyon különböző a Unicode kezelésük, és amennyire a doksit olvastam (a 2-es és 3-as közti különbségek doksiját), nekem úgy tűnt, hogy a Python 3 az a nyelv, amelyik végre-valahára koncepcionálisan is jól kezeli a problémát. Úgy, ahogyan minden programozási nyelvnek kellene.)

Vissza a témához: Unicode sztringet nem simán idézőjelek közt kell megadni, hanem azt hiszem hogy egy u betűvel bevezetve: u"Árvíztűrő", de ez lehet hogy eltér a 2-es és 3-as között, nézz utána a neten.

Valszeg a te esetedben az történik, hogy a Python latin1-es vagy nemtommilyen stringként, vagy byte-sorozatként értelmezi, amit írsz, és egyenként írja ki a byte-jait, amik szerencsés esetben aztán megint összeállnak utf8-as betűkké, de ha pl. valaki/valami elhasal valamelyik byte-on (mert az nem nyomtatható, vagy mittudomén), akkor nem.