Teckenkodningsproblem i Ubuntu

Permalänk
Hedersmedlem

Teckenkodningsproblem i Ubuntu

Har pillat med teckenkodning i Ubuntu på en dator där Ubuntu installerades för länge sen (Ubuntu 5.04 var första versionen som installerades, tror jag) och som jag inte haft tillgång till/intresse av förrän nu.

Ett tag gick det inte att köra t ex `apt-get` då det klagade på något som tydligen var relaterat till teckenkodningen då det funkat efter att jag lagt till filen `/var/lib/locales/supported.d/sv` med innehållet "sv_SE UTF-8" och sedan kört `locale-gen`. Numera fungerar det att köra, men svenska tecken i outputen ser ut som följer:

$ sudo apt-get update ... Hämtade 51,1kB på 0s (97,2kB/s) Läser paketlistor... Färdig

Svenska tecken ser alltså inte rätt ut.

Ett annat exempel:

$ touch test-åäö $ ls test-??? $ rm test-åäö $ ls $

Filer som skapades innan `sv_SE UTF-8` installerades ser i stället ut som `test-ööö` (om filen var tänkt att heta `test-ÖÖÖ`).

Problemet är att om jag t ex vill köra OpenOffice från kommandoraden och öppna en fil som innehåller åäöÅÄÖ så vill den inte med motiveringen att den inte hittar filen, t ex:

$ oowriter test-åäö [dialogruta] test-[tre stycken diamanter med frågetecken i] does not exist.[/dialogruta]

Innan hade `LANG`-variabeln i skalet värdet `en_US.UTF-8`; har testat att ändra i `/etc/environment` så att det haft värdet `sv_SE.UTF-8` och bara `sv_SE` med samma resultat som innan.

Lite output:

$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=7.04 DISTRIB_CODENAME=feisty DISTRIB_DESCRIPTION="Ubuntu 7.04" $ locale LANG=en_US.UTF-8 LC_CTYPE="sv_SE" LC_NUMERIC="sv_SE" LC_TIME="sv_SE" LC_COLLATE="sv_SE" LC_MONETARY="sv_SE" LC_MESSAGES="sv_SE" LC_PAPER="sv_SE" LC_NAME="sv_SE" LC_ADDRESS="sv_SE" LC_TELEPHONE="sv_SE" LC_MEASUREMENT="sv_SE" LC_IDENTIFICATION="sv_SE" LC_ALL=sv_SE $ locale -a C en_AU.utf8 en_BW.utf8 en_CA.utf8 en_DK.utf8 en_GB.utf8 en_HK.utf8 en_IE.utf8 en_IN en_NZ.utf8 en_PH.utf8 en_SG.utf8 en_US.utf8 en_ZA.utf8 en_ZW.utf8 POSIX sv_SE sv_SE.utf8

Vad ska jag göra för att output från exempelvis `apt-get` och `ls` att se rätt ut och få allmän ordning på allt teckenkodningsrelaterat?

Visa signatur

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

Permalänk
Medlem

Testa export LC_ALL=sv_SE.UTF-8 eller en_US.UTF-8

Visa signatur

pub 1024D/6600D334 2006-03-29
Key fingerprint = 72B7 2466 1864 C5DF 4A01 A74D A438 7C46 6600 D334

Permalänk
Hedersmedlem

Sätter jag `LC_ALL` till `en_US.UTF-8` så kringgås problemet genom att t ex `apt-get` pratar med mig på engelska istf svenska och "åäö" därmed inte används, men vid `ls` av en katalog med filer som innehåller `åäö` blir resultatet fortfarande `???`, så det är ingen lösning.

`sudo dpkg-reconfigure locales` funkar inte på samma sätt på denna Ubuntu-installation som Debian tydligen; allt den gör på Ubuntu är precis vad `locale-gen` gör. Jag trodde det skulle låta mig välja från en lista vilka "locales" jag ville ha installerade och även få markera vilken som ska användas som standard.

Jag har inte fått någon bra överblick på locales i Linux. Problem har jag sett på olika installationer, men lösningarna har ofta bara dykt upp utan att jag kunnat specificera exakt vad som fixade problemet.

Visa signatur

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

Permalänk

Jag ändrade /etc/environment till

LANG="sv_SE.ISO-8859-15" LANGUAGE="sv_SE:sv"

Då blev det som det skulle för mig.

andreas@begmana2:~$ locale LANG=sv_SE.ISO-8859-15 LANGUAGE=sv_SE:sv LC_CTYPE="sv_SE.ISO-8859-15" LC_NUMERIC="sv_SE.ISO-8859-15" LC_TIME="sv_SE.ISO-8859-15" LC_COLLATE="sv_SE.ISO-8859-15" LC_MONETARY="sv_SE.ISO-8859-15" LC_MESSAGES="sv_SE.ISO-8859-15" LC_PAPER="sv_SE.ISO-8859-15" LC_NAME="sv_SE.ISO-8859-15" LC_ADDRESS="sv_SE.ISO-8859-15" LC_TELEPHONE="sv_SE.ISO-8859-15" LC_MEASUREMENT="sv_SE.ISO-8859-15" LC_IDENTIFICATION="sv_SE.ISO-8859-15"

Ubuntu 7.10 (kanske inte är samma för dig) Bara att byta ut till sv_SE:UTF8 eller vad det är istället för ISO.

Visa signatur

Citera.mig.för.svar.][resaomkring.blogspot.com][ Intel I5 2.66GHz.4GB DDR3.ATI HD4670][ @Twitter
'We would like to see most of the human race killed off because it is unworthy, it is unworthy of the gift of life' - Behemoth - Antichristian Phenomenon.

Permalänk
Hedersmedlem

Jag har experimenterat med värdena i `/etc/environment` också, men problemen har kvarstått.

Jag skrev innan att locale-grejer brukar lösa sig helt plötsligt utan att man vet vad man gjort, och detta har typ gjort det. Nu efter att jag pillat så märkte jag att om jag loggar in på den fysiska datorn så stämmer tecknena ("åäö" beter sig som de ska) men om jag SSH:ar in hemifrån så är det som innan. Att det fortfarande är problem på det hållet kan ju ha att göra med min dator här hemma och någon UTF-8-förbistring eller något.

Om jag skriver "å", "ä" eller "ö" i en SSH-session hemifrån så fungerar bokstäverna som "lock characters": dvs om jag trycker på t ex "ö" så kommer inte karaktären fram förrän jag trycker Space efteråt. Märkliga ting, det här.

EDIT, långt senare: Hittade tråden igen av en slump. Om jag minns rätt berodde denna problematik på att den Debianinstallation jag loggade in med över SSH använde ISO-8859-1-teckenkodning. Samtidigt hade Ubuntudatorn nog migrerats från ISO-8859-1 till UTF-8 någon gång, och även tagit över en mängd CP-1252-kodade filer från en tidigare Windowsinstallation. Något som grumlade felsökningen för mig var att jag inte tidigt lyckades isolera hur resultaten skiljde sig beroende på om jag satt hemma eller på Ubuntudatorn.

Jag använder fortfarande samma Debianinstallation, men minns att jag migrerade den från ISO-8859-1 till UTF-8 med en del möda. Detta är inget problem någon bör få idag, då alla Linuxsystem som installerats senare än typ 2006 "bör" köra UTF-8 som standard.

Det var en del förvirring gällande var inställningar för locale egentligen skulle lagras, då det kan spridas ut på flera ställen. Åtminstone på Debian så ska `/etc/default/locale` idag vara det "korrekta" stället att lagra inställningar, och det är bäst att bara ta bort `/etc/enviroment` och än värre saker som localekonfiguratin i `/etc/bashrc` och liknande. Locale [Debian wiki] har mer information.

Lägger till "lösning", några år senare :-)
Visa signatur

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