Skrivet av Nifelhem:
Ser ut att klara mig från linux ett tag till i alla fall
Fick det att funka i cmd men inte i powershell.
Har satt # -*- coding: ISO-8859-1 -*- i scriptet
Angav ISO-8859-1 som teckenuppsättning i Notepad++, både på textfilen.txt och scriptet som anropar textfilen.
bytte till 1252 som teckentabell i cmd (chcp 1252), har ingen aning om detta har någon betydelse.
Tack för visat intresse, trevligt ställe det här.
CP1252 (aka Windows-1252) är den teckentabell som Windows vanligen använder som standard (åtminstone i "legacy"-applikationer; man får hoppas att de gått över till UTF-8 eller något för nyare saker). Det är en närbesläktad men i vissa hänseenden inkompatibel variant av ISO-8859-1, och en klassisk problemfaktor i kommunikation mellan Windows och andra system.
"-*- coding"-grejen i din Pythonfil säger bara till Pythontolken att själva källkoden i just den filen är skriven i denna teckenkodning; det spelar inte in i någon övrig funktionalitet (vill man kunna skriva åäö o dyl, t ex i kommentarer, så är det bra att sätta den till något vettigt).
Däremot spelar det roll vilken teckenkodning som datafilen har, som du märkt. Python kan hantera egentligen allt, men det kan kännas lite bökigt ibland. Om indatafilen t ex är i UTF-8 så kan du börja att köra
rad = unicode(rad, 'utf-8')
för att sedan köra encode('cp1252') på alla strängar vid output till terminalen, exempelvis:
print rad.encode('cp1252')
och testa lite olika kombinationer. Jag önskar att jag visste exakt alla möjliga omständigheter som kan uppstå beroende på system och olika kombinationer av teckenkodningar, men jag har blivit förvånad många gånger över vad som händer, så jag vågar inte komma med några exakta uttalanden på frihand. Jag ser till att hålla mig i rena UTF-8-omgivningar om jag har möjlighet att välja.
Men framför allt: om du nu har fått saker att fungera så är det ju inget egentligt problem längre. Men det kan vara trevligt att förstå varför det krånglar, så att man känner att man har kontroll över sin omgivning .
Tillägg: Hittade detta svar drygt fem år senare, och kan väl nämna att print rad.encode('cp1252') inte bör hjälpa nämnvärt. så länge som strängen hade omvandlats till en unicode-sträng, och terminalens uppgivna teckenkodning överhuvudtaget kunde representera tecknet i fråga, så bör det gå att ge unicode-strängen till print och se Python sköta all konvertering själv.
Situationen har generellt förbättrats/förtydligats i Python 3, och allt som klockan tickar så kommer ju liknande frågeställningar som den ovan vara en historisk parentes en dag, tack och lov .