|
| 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 |
| | |
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 (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 |
| | |
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
| |
|
|