/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Problemer med æ,ø og å i Java.
Fra : C. Jensen


Dato : 14-08-01 09:14

Jeg har efterhånden stødt på nogen irriterende problemer med Javas
behandling af æ, ø og å. Hvis man f.eks skriver:
System.out.println("Lærke"); bliver det i en dos-prompt udskrevet som L?rke
(?=my men jeg kunne ikke skrive my i indlægget).

I et andet tilfælde har jeg lagt navnet Lærke ind i en MySQL database [1,
Lærke] via MySQL's egen dos-baserede kommando prompt.
Når det gennem JDBC (resultSet.getString(2);) hentes ud igen til den
Dos-prompt hvor jeg kører javaprogammet, bliver det skrevet rigtigt nok.
Hvis jeg derimod søger efter 'æ' i den levereder streng med:
streng.indexOf('æ'); kan Java ikke finde bogstavet. Der ledes efter 'my'.

Er der nogen der har en ide til at komme ud af forviklingerne ?




 
 
Bertel Lund Hansen (14-08-2001)
Kommentar
Fra : Bertel Lund Hansen


Dato : 14-08-01 12:12

C. Jensen skrev:

>Jeg har efterhånden stødt på nogen irriterende problemer med Javas
>behandling af æ, ø og å.

Det er ikke Javas problem. Det er DOS' som benytter sit eget
tegnsæt. Vi som er vokset op med DOS, er nærmest eksperter i at
håndtere dette problem. Hvis du vil bruge blandet DOS- og
Windows-tilgang, kan du ikke undgå det. Hvis du vælger én
platform, kan du godt.

Du får brug for at lave en konverteringsrutine mellem de to
tegnsæt. I praksis kan man komme langt blot med en oversættelse
af æ, ø, og å. Alle de andre danske bogstaver ligger på samme
plads for heldigvis er DOS' tegnsæt baseret på ASCII (de første
127 tegn).

>(?=my men jeg kunne ikke skrive my i indlægget).

µ

Det kan nås via tegnoversigten (men det er ligegyldigt i dit
indlæg).

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Jacob Vandborg (14-08-2001)
Kommentar
Fra : Jacob Vandborg


Dato : 14-08-01 14:23

[Snip]
> >(?=my men jeg kunne ikke skrive my i indlægget).
>
> µ
>
[Snip]

Jeg troede ellers at det betød micro, ligesom µF = micro Farad

=)
Jacob



Bertel Lund Hansen (14-08-2001)
Kommentar
Fra : Bertel Lund Hansen


Dato : 14-08-01 14:50

Jacob Vandborg skrev:

>> µ
>Jeg troede ellers at det betød micro, ligesom µF = micro Farad

Ups, det har du da ret i.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Esben Mose Hansen (14-08-2001)
Kommentar
Fra : Esben Mose Hansen


Dato : 14-08-01 16:31

Jacob Vandborg wrote:
> [Snip]
>
>>>(?=my men jeg kunne ikke skrive my i indlægget).
>>>
>>µ
>>
>>
> [Snip]
>
> Jeg troede ellers at det betød micro, ligesom µF = micro Farad

µ er et græsk bogstav, vistnok svarende til n. I SI-systemet er det
rigtigtnok en forkortelse for mikro=0.000001=$10^{-6}$.

mvh. Esben




Niels Teglsbo (14-08-2001)
Kommentar
Fra : Niels Teglsbo


Dato : 14-08-01 23:30

Bertel Lund Hansen <skrivtil@lundhansen.dk> wrote:

> µ
> Det kan nås via tegnoversigten (men det er ligegyldigt i dit
> indlæg).

På min danske Win95 er det også AltGr + m, vist det eneste bogstav, der
i Windows95 har den effekt, senere er Euro-tegnet kommet til.

--
Niels, The Offspring Mailinglist www.image.dk/~teglsbo

Ole Nielsby (14-08-2001)
Kommentar
Fra : Ole Nielsby


Dato : 14-08-01 19:28


C. Jensen <c_jensen@mailme.dk> skrev:

> Jeg har efterhånden stødt på nogen irriterende problemer med Javas
> behandling af æ, ø og å. Hvis man f.eks skriver:
> System.out.println("Lærke"); bliver det i en dos-prompt udskrevet
> som L[my]rke

DOS codepages er noget skrammel som du skal holde dig fra med
mindre det er nødvendigt at dine applikationer kører under DOS.

Tilbage er tre relevante muligheder:

1. Latin-1, som pånær tankestreger og et par eksotiske tegn er
identisk med Windows-tegnsættet,

2. UTF-8, hvor æ, ø og å kodes som 2-byte-kombinationer,

3. Unicode, hvor alle tegn fylder 16 bits.

3. fylder unødvendig meget; vælg 1. hvis du vil redigere filerne
med Notepad eller lignende, vælg 2. hvis du vil være kompatibel
med lande der ikke bruger vesteuropæisk tegnsæt.

Hvis du skriver server-side, skal du være opmærksom på at
browserne vistnok som regel sender i UTF-8; IE gør i hvert fald.

Java har klasser der understøtter disse encodings; kig under
CharacterEncoding i javadoc'en.

ON/***Fjern sneglen fra min svaradresse***


Bertel Lund Hansen (14-08-2001)
Kommentar
Fra : Bertel Lund Hansen


Dato : 14-08-01 20:45

Ole Nielsby skrev:

>3. Unicode, hvor alle tegn fylder 16 bits.
>3. fylder unødvendig meget;

Javas Char er på 16 bits.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

Ole Nielsby (14-08-2001)
Kommentar
Fra : Ole Nielsby


Dato : 14-08-01 21:18


Bertel Lund Hansen <skrivtil@lundhansen.dk> skrev:

> Ole Nielsby skrev:
>
> >3. Unicode, hvor alle tegn fylder 16 bits.
> >3. fylder unødvendig meget;
>
> Javas Char er på 16 bits.

Men de kodes som regel i 8-bits tegnsæt i forbindelse med IO.

Selv Javas egne class-filer bruger UTF-8 til strings.

ON/***Fjern sneglen fra min svaradresse***


Ulrik Magnusson (14-08-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 14-08-01 22:44

Ole Nielsby wrote:

> Men de kodes som regel i 8-bits tegnsæt i forbindelse med IO.
> Selv Javas egne class-filer bruger UTF-8 til strings.

UTF-8 er vel ikke ensbetydende med 8-bit? Hvis jeg ikke har misforstået
det helt, bruges der 1-3 bytes til at repræsentere tegn:


http://java.sun.com/docs/books/vmspec/2nd-edition/html/ClassFile.doc.html#7963

Ulrik Magnusson


Thorbjørn Ravn Ander~ (15-08-2001)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 15-08-01 07:25

Ulrik Magnusson wrote:
>
> Ole Nielsby wrote:
>
> > Men de kodes som regel i 8-bits tegnsæt i forbindelse med IO.
> > Selv Javas egne class-filer bruger UTF-8 til strings.
>
> UTF-8 er vel ikke ensbetydende med 8-bit? Hvis jeg ikke har misforstået
> det helt, bruges der 1-3 bytes til at repræsentere tegn:
>
> http://java.sun.com/docs/books/vmspec/2nd-edition/html/ClassFile.doc.html#7963

Der refereres til en 8-bit datastrøm, hvor hvert 16-bit tegn er
representeret som 1-3 tegn i strømmen.

Systemet er lavet sådan så selv om man ikke får starten med, er det
muligt at se bort fra et par støj bytes i starten, og komme tilbage til
den korrekte 16-bit repræsentation.

Betragt UTF-8 som en slags zip-filudgave af 16-bit.
--
Thorbjørn Ravn Andersen "...plus... Tubular Bells!"
http://bigfoot.com/~thunderbear

Thorbjørn Ravn Ander~ (15-08-2001)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 15-08-01 07:22

Ole Nielsby wrote:

> 1. Latin-1, som pånær tankestreger og et par eksotiske tegn er
> identisk med Windows-tegnsættet,
>
> 2. UTF-8, hvor æ, ø og å kodes som 2-byte-kombinationer,
>
> 3. Unicode, hvor alle tegn fylder 16 bits.

Unicode er fortolkningen af 16-bit tegnene. UTF-8 er en nedfoldning af
16-bitværdier i en 8-bit tegnstrøm. Den tilsvarende 1-1 repræsentation
af Unicode som 2x8 bit tegn hedder UTF-16.

--
Thorbjørn Ravn Andersen "...plus... Tubular Bells!"
http://bigfoot.com/~thunderbear

C. Jensen (14-08-2001)
Kommentar
Fra : C. Jensen


Dato : 14-08-01 20:45

Det virker oplagt at jeg skal holde op med at bekymre mig om hvad der vises
i DOS. Derimod synes jeg det er et problem at kommandoen
string.indexOf('æ'); ikke finder noget når 'string' indeholder et æ.
Kommandoen finder godt nok alle de andre bogstaver.
System.out.println(string); udskriver et 'æ' til dos-prompten uden
problemer. 'string' er i øvrigt navnet på min datter Lærke, og er hentet ud
af en MySQL database via JDBC med resultSet.getString("navn");

Chris




"C. Jensen" <c_jensen@mailme.dk> skrev i en meddelelse
news:3b78dd1a$0$332$edfadb0f@dspool01.news.tele.dk...
> Jeg har efterhånden stødt på nogen irriterende problemer med Javas
> behandling af æ, ø og å. Hvis man f.eks skriver:
> System.out.println("Lærke"); bliver det i en dos-prompt udskrevet som
L?rke
> (?=my men jeg kunne ikke skrive my i indlægget).
>
> I et andet tilfælde har jeg lagt navnet Lærke ind i en MySQL database [1,
> Lærke] via MySQL's egen dos-baserede kommando prompt.
> Når det gennem JDBC (resultSet.getString(2);) hentes ud igen til den
> Dos-prompt hvor jeg kører javaprogammet, bliver det skrevet rigtigt nok.
> Hvis jeg derimod søger efter 'æ' i den levereder streng med:
> streng.indexOf('æ'); kan Java ikke finde bogstavet. Der ledes efter 'my'.
>
> Er der nogen der har en ide til at komme ud af forviklingerne ?
>
>
>



Ole Nielsby (14-08-2001)
Kommentar
Fra : Ole Nielsby


Dato : 14-08-01 21:46


C. Jensen <c_jensen@mailme.dk> skrev:

> Det virker oplagt at jeg skal holde op med at bekymre mig
> om hvad der vises i DOS. Derimod synes jeg det er et problem
> at kommandoen string.indexOf('æ'); ikke finder noget når
> 'string' indeholder et æ.

Det gør den skam også, hvis din string indeholder noget som
Java kan genkende som et æ.

Problemet er nok at du har skrevet 'Lærke' i DOS-tegnsættet.
Java læser det som om det var Latin-1 (= windows-tegnsættet).

(Java-programmet har du formentlig skrevet i en editor under
Windows - med Latin-1 -tegnsættet. Det er hvad Java-compileren
forventer, og 'æ'-et i kommandoen oversættes til unicode-værdien
for æ.)

Prøv i første omgang at holde databasen udenfor, og se om
du kan få dit Java-program til at læse, skrive og genkende
ord med æ, ø og å. (Undgå at bruge DOS-kommandolinjen;
strik en simpel brugerflade sammen i AWT, Swing, JSP eller
hvad du nu har tænkt dig at bruge til det færdige program.)

Når det er på plads, får du formentlig ingen problemer med at
koble databasen på. Så vidt jeg husker, bruger JDBC-driveren
til MySQL den rigtige kodning, men muligvis skal du fortælle
driveren eller databasen at tegnsættet er Latin-1.

(Du kan godt køre databasen med en anden kodning, men det
kan give problemer med sortering og søgning.)

ON/***Fjern sneglen fra min svaradresse***

default


Thorbjørn Ravn Ander~ (15-08-2001)
Kommentar
Fra : Thorbjørn Ravn Ander~


Dato : 15-08-01 07:20

"C. Jensen" wrote:
>
> Jeg har efterhånden stødt på nogen irriterende problemer med Javas
> behandling af æ, ø og å. Hvis man f.eks skriver:
> System.out.println("Lærke"); bliver det i en dos-prompt udskrevet som L?rke
> (?=my men jeg kunne ikke skrive my i indlægget).

Velkendt problem. Skift til et ISO-Latin baseret tegnsæt i din
DOS-prompt.

"chcp 1252".
--
Thorbjørn Ravn Andersen "...plus... Tubular Bells!"
http://bigfoot.com/~thunderbear

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408928
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste