Python - Svenska tecken från importerad .txt till cmd

Permalänk
Medlem

Python - Svenska tecken från importerad .txt till cmd

Hej alla. Jag får, trots flitigt användande av google, inte till mina svenska tecken.
Sitter och försöker lära mig Python genom att skapa ett enkelt glosprogram åt min dotter. Jag har tänkt att hon får lägga sina ord i en .txt-fil som mitt script sedan får importera. På datorn hemma fick jag i går till åäö på den text som finns i scriptet. Jag klarar däremot inte av orden som importeras från .txt-filen.

Jag har i mitt script med # -*- coding: UTF-8 -*-
Jag har ställt in notepad++ på UTF-8 utan BOM, gjorde även textfilen i NP++ med samma inställningar.
Bytte typsnitt till "consolas" i cmd.
Provade efter tips i forum att köra chcp 865 för att byta teckentabell i cmd.

Eftersom det är dottern som ska fylla i txt-filen skulle jag gärna se en lösning där man inte behöver använda teckenkoder eller dylikt för att klara detta.

Permalänk
Medlem

Gissar att du kör Windows?
Terminalen i Windows suger ju tyvärr för sånt här, då den ej stödjer utf-8 eller någon annan vettig text-kodning.
En lösning kan vara att installera Cygwin, och köra riktiga bash som terminal den vägen. Det fungerar bra för mig. Och om du med notepad++ eller liknande sparar en textfil som utf-8 så kan sedan vanliga notepad/anteckningar öppna och ändra i filen och spara i utf-8.

Alternativt kan du ju skriva ett gui till ditt python-program, och själv hantera in och utmatning i vilken kodning du själv väljer. Och den vägen undvika windows-terminalen. Om du med glosprogrammet vill lära dig python så kan du ju se det som ett lite större projekt bara, och lära dig mer så.

Alternativt titta på senaste Python 3.3, som om jag minns rätt börjat arbeta mot att bättre stödja textkodningen i Windows-terminalen. Men om detta fungerar bra än eller inte har jag ingen aning om.

Och om du bara vill ha ett glosprogram, och egentligen inte är intresserad av att lära dig python så finns det ju flera bra gratis glosprogram till Windows som du bara kan ladda ner och börja använda.

Permalänk
Medlem
Skrivet av Genesis:

Gissar att du kör Windows?
Terminalen i Windows suger ju tyvärr för sånt här, då den ej stödjer utf-8 eller någon annan vettig text-kodning.
En lösning kan vara att installera Cygwin, och köra riktiga bash som terminal den vägen. Det fungerar bra för mig. Och om du med notepad++ eller liknande sparar en textfil som utf-8 så kan sedan vanliga notepad/anteckningar öppna och ändra i filen och spara i utf-8.

Alternativt kan du ju skriva ett gui till ditt python-program, och själv hantera in och utmatning i vilken kodning du själv väljer. Och den vägen undvika windows-terminalen. Om du med glosprogrammet vill lära dig python så kan du ju se det som ett lite större projekt bara, och lära dig mer så.

Alternativt titta på senaste Python 3.3, som om jag minns rätt börjat arbeta mot att bättre stödja textkodningen i Windows-terminalen. Men om detta fungerar bra än eller inte har jag ingen aning om.

Och om du bara vill ha ett glosprogram, och egentligen inte är intresserad av att lära dig python så finns det ju flera bra gratis glosprogram till Windows som du bara kan ladda ner och börja använda.

Tack för svaret. Jo visst är det så att jag kör Windows (7). Man kan ju tycka att sånt här borde funka 2013. Jag läste att teckenjoxet funkar bättre i linux, men rackarns om jag orkar börja med det på "gammeldagan".

Jag får kolla lite på gui och tk-inter framöver. Borde väl gå att skriva färdigt script-idén och trolla om den för att visa i fönster sedan (?). Har aktivt struntat i objekt-orienteringsjoxet än så länge för att träna på funktioner, loopar och diverse listor.

Python 3 ska, vad jag har hört, inte skilja sig så mycket från 2.7 som jag använder nu. Surfar vidare på det spåret.

Ja, om vi ska vara ärliga så behövs det väl inte uppfinnas ytterligare ett glosprogram. Kanske finns gjort här på swec redan. Det är väl mest för att lära sig filimport/export och dictionarys som jag håller på. Har en känsla av att användarna (läs 11-åringen) kommer att tröttna rätt så fort ändå :-).

Permalänk
Medlem

Det funkar i Windows och 2013, problemet är att du använder kommando promten och inte Powershell. promten är där för bakåt kompabilitet men inte något att rekommendera att sitta i nu.

Starta powershell istället för cmd.

Förövrigt så stödjer även gamla konsolen Unicode sedan win2k, varför det inte fungerar tillsammans med phyton har jag inget svar på dock kan vara något med att den försöker outputa ascii?

Edit: Läste lite att innan löste man detta problem med
import sys
sys.setdefaultencoding('utf-8')
http://docs.python.org/2/library/sys.html#sys.setdefaultencod...

-

Sedan lite off topic, men gloser så funkar Spaced Repetition absolut bäst, du hittar en bra implementation här http://ankisrs.net/ ( även skriven i Phyton ). Tyvärr är detta studie sättet ganska okänt Sverige då här ska vi oftast trycka in 50+ glosor på 2 dagar och tja... Inte med tanken att komma ihåg över längre tider.

Visa signatur

Speldator: i7-8700k, 32GB DDR4, RTX2080
Server 1: SB 2500k, MZI -P67GD55, 32GB DDR3, Corsair MX 240GB SSD
Surface Pro 2017, Konsoler: Typ alla, Oculus Rift

Permalänk
Medlem
Skrivet av MugiMugi:

Det funkar i Windows och 2013, problemet är att du använder kommando promten och inte Powershell. promten är där för bakåt kompabilitet men inte något att rekommendera att sitta i nu.

Starta powershell istället för cmd.

Förövrigt så stödjer även gamla konsolen Unicode sedan win2k, varför det inte fungerar tillsammans med phyton har jag inget svar på dock kan vara något med att den försöker outputa ascii?

Edit: Läste lite att innan löste man detta problem med
import sys
sys.setdefaultencoding('utf-8')
http://docs.python.org/2/library/sys.html#sys.setdefaultencod...

-

Sedan lite off topic, men gloser så funkar Spaced Repetition absolut bäst, du hittar en bra implementation här http://ankisrs.net/ ( även skriven i Phyton ). Tyvärr är detta studie sättet ganska okänt Sverige då här ska vi oftast trycka in 50+ glosor på 2 dagar och tja... Inte med tanken att komma ihåg över längre tider.

Har blandat lite mellan powershell och cmd. Har problem med PS då terminalfönstret försvinner när det blir fel i körningen(?). Ska prova en sväng med setdefaultencoding och se om detta löser saken.

Tycker ändå att det är skumt att svenska tecken från scriptet visas rätt, men inte de tecken som scriptet importerar från textfilen.

Tack för tipsen.

Permalänk

Installera virtualbox och starta en linuxmaskin i ett fönster, det är det lättaste tyvärr.

Visa signatur

Argaste

Permalänk
Medlem

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.

Edit: fick det att funka i terminalfönster i powershell också genom att lägga till detta i koden

# -*- coding: ISO-8859-1 -*- import os os.system("chcp 1252") os.system('cls')

Tack för visat intresse, trevligt ställe det här.

Permalänk
Hedersmedlem
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 .

Uppdatering, drygt fem år senare.
Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem

Hmm
Spara txt filen i Unicode. Det har löst många av mina problem när jag använt Powershell för att importera bulk jobb

Visa signatur

Kamera: D800
Optik:Nikkor 24-70mm f/2.8, Nikkor 70-200 f/2.8 VR, Sigma 50mm f/1.4, 500m f/4 VR