Lokale Relaterte Problemer

Denne siden inneholder informasjon om lokalitetsrelaterte problemer og problemstillinger. I de følgende avsnittene finner du en generisk oversikt over ting som kan dukke opp når du konfigurerer systemet ditt for ulike steder. Mange (men ikke alle) eksisterende lokalitetsrelaterte problemer kan klassifiseres og faller inn under en av overskriftene nedenfor. Alvorlighetsgradene nedenfor bruker følgende kriterier:

Hvis det er en kjent løsning for en bestemt pakke, vil den vises på pakkens side.

Den Nødvendige Kodingen er Ikke et Gyldig Alternativ i Programmet

Alvorlighet: Kritisk

Noen programmer krever at brukeren spesifiserer tegnkodingen for deres inndata eller utdata og presenterer bare et begrenset utvalg av kodinger. Dette er tilfellet for -X alternativet i Enscript-1.6.6, -input-charset alternativet i uoppdatert Cdrtools-3.02a09, og tegnsettene som tilbys for visning i menyen til Links-2.30. Hvis den nødvendige kodingen ikke er i listen blir programmet vanligvis helt ubrukelig. Til ikke-interaktive programmer, kan det være mulig å omgå dette ved å konvertere dokumentet til et støttet inndatategnsett før innsending til programmet.

En løsning på denne typen problemer er å implementere den nødvendige støtten for den manglende kodingen som en oppdatering til det originale programmet eller å finne en erstatning.

Programmet Forutsetter Lokalitetsbasert Koding av Eksterne Dokumenter

Alvorlighet: Høy for ikke-tekst dokumenter, lav for tekst dokumenter

Noen programmer, nano-8.4 eller JOE-4.6 for eksempel, antar at dokumenter alltid er i kodingen antydet av gjeldende lokalitet. Mens denne antakelsen kan være gyldig for de brukeropprettede dokumentene, er det ikke trygt for eksterne. Når denne antagelsen mislykkes, blir ikke-ASCII tegn vist feil, og dokumentet kan bli uleselig.

Hvis det eksterne dokumentet er helt tekstbasert, kan det bli konvertert til gjeldende lokalitetskoding ved hjelp av iconv programmet.

For dokumenter som ikke er tekstbaserte er dette ikke mulig. Faktisk kan forutsetningen i programmet være fullstendig ugyldig for dokumenter der Microsoft Windows operativsystemet har satt de facto standarder. Et eksempel på dette problemet er ID3v1 koder i MP3-filer. For disse tilfellene er den eneste løsningen å finne et erstatningsprogram som ikke har problemet (f.eks. et som lar deg spesifisere den antatte dokumentkodingen).

Blant BLFS pakker gjelder dette problemet nano-8.4, JOE-4.6, og alle mediespillere unntatt Audacious-4.4.2.

Et annet problem i denne kategorien er når noen ikke kan lese dokumentene du har sendt dem fordi deres operativsystem er satt opp til å håndtere tegnkodinger annerledes. Dette kan skje ofte når den andre personen bruker Microsoft Windows, som kun gir en tegnkoding for et gitt land. For eksempel, dette forårsaker problemer med UTF-8 kodede TeX dokumenter opprettet i Linux. På Windows vil de fleste applikasjoner anta at disse dokumentene har blitt opprettet med standard Windows 8-bits koding.

I ekstreme tilfeller kan problemer med Windows kodingskompatibilitet kun løses ved å kjøre Windows programmer under Wine.

Programmet Bruker eller Oppretter Filnavn med Feil Koding

Alvorlighet: Kritisk

POSIX standarden krever at filnavnkodingen er kodingen implisert av gjeldende LC_CTYPE lokalekategori. Denne informasjon er godt skjult på siden som spesifiserer atferden av Tar og Cpio programmer. Noen programmer tar feil som standard (eller har rett og slett ikke nok informasjon til å få det riktig). Resultatet er at de oppretter filnavn som senere ikke vises riktig av ls, eller de nekter å godta filnavn som ls vises ordentlig. For GLib-2.84.0 biblioteket, kan problemet rettes ved å stille inn G_FILENAME_ENCODING miljøvariabel til den spesielle "@locale" verdien. Glib2 baserte programmer som ikke respekter den miljøvariabelen er buggy.

.zip formatet har dette problemet fordi den ikke lagrer kodingen for navnene på arkiverte filer. Når unzip (faktisk en symbolkobling til bsdunzip fra libarchive-3.7.9) pakker det ut, som standard antas navnene å være kodet som CP850, Windows kode for vesteuropeiske språk. Men navnene kan faktisk være kodet på en annen måte hvis den inneholder ikke-latinske tegn (for eksempel CP936 for forenklet kinesisk). Deretter uten manuelt å spesifiserer kodingen, vil disse ikke-latinske tegnene bli omgjort til uleselige sekvenser av bsdunzip.

Den generelle regelen for å unngå denne klassen av problemer er å unngå å installere ødelagte programmer. Hvis dette er umulig, vil convmv kommandolinjeverktøy kunne brukes til å fikse filnavn opprettet av disse ødelagte programmene, eller med vilje mangle de eksisterende filnavnene for å møte de brutte forventningene til slike programmer.

I andre tilfeller er et lignende problem forårsaket av import av filnavn fra et system som bruker en annen lokalitet med et verktøy som er ikke lokalbevisst (f.eks., OpenSSH-9.9p2). For å unngå mangling av ikke-ASCII tegn når du overfører filer til et system med en annen lokalitet, kan en av følgende metoder brukes:

  • Overfør uansett, fiks skaden med convmv.

  • På avsendersiden oppretter du et tar arkiv med --format=posix bryteren overført til tar (dette vil være standard i fremtidige versjoner av tar).

  • Send filene som vedlegg. E-postklienter spesifiserer koding av vedlagte filnavn.

  • Skriv filene til en flyttbar disk formatert med et FAT eller FAT32 filsystem.

  • Overfør filene med Samba.

  • Overfør filene via FTP ved å bruke en RFC2640-bevisst server (dette betyr for øyeblikket bare wu-ftpd, som har dårlig sikkerhetshistorikk) og klient (f.eks. lftp).

De siste fire metodene fungerer fordi filnavnene blir automatisk konvertert fra avsenderens lokalitet til UNICODE og lagret eller sendt i denne formen. De blir deretter transparent konvertert fra UNICODE til mottakerens lokalitetskoding.

Programmet Ødelegger Multibyte Tegn eller Teller Ikke Karakterceller Riktig

Alvorlighet: Høy eller kritisk

Mange programmer ble skrevet i en eldre tid hvor multibyte lokaliteter ikke var vanlige. Slike programmer antar at C "char" data type, som er en byte, kan brukes til å lagre enkelttegn. Videre antar de at enhver sekvens av tegn er en gyldig streng og at hvert tegn opptar en enkelt tegncelle. Slike forutsetninger bryter fullstendig i UTF-8 lokaliteter. Den synlige manifestasjon er at programmet trunkerer strenger for tidlig (dvs. ved 80 byte i stedet for 80 tegn). Terminalbaserte programmer plasserer ikke markøren riktig på skjermen, reager ikke på "Tilbake" tasten med å slette ett tegn, og lar søppeltegn stå igjen rundt når du oppdaterer skjermen, som vanligvis gjør skjermen til et komplett rot.

Å fikse denne typen problemer er en kjedelig oppgave fra en programmerers synspunkt, som alle andre tilfeller av ombygging av nye konsepter inn i det gamle feilaktige designet. I dette tilfellet må man redesigne alle datastrukturer for å imøtekomme det faktum at en komplett karakter kan spenne over et variabelt antall "char"-er (eller bytte til wchar_t og konvertere etter behov). Også for hver kall til "strlen" og lignende funksjoner, finne ut om et antall byte, et antall tegn, eller bredden på strengen var egentlig ment. Noen ganger er det raskere å skrive et program med samme funksjonalitet fra bunnen av.

Blant BLFS pakker gjelder dette problemet xine-ui-0.99.14 og alle skallene.