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
- 2119 megtekintés
Hozzászólások
ezt probaltad? :)
# -*- coding:Utf-8 -*-
(innen van az otlet) - 4.6-os fejezet, 41. oldal
---
Tévedni mindenkinek szabad, csak a mérnöknek észre kell vennie.
- A hozzászóláshoz be kell jelentkezni
É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.
--
не закурится!
- A hozzászóláshoz be kell jelentkezni
koszonom urak erre gondoltam
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Köszönöm szépen!
Frissítettem 3.0.1-re és valóban szépen hozza a karaktereket!
Jó munkát a mai napra!
Valek
- A hozzászóláshoz be kell jelentkezni