Avatar billede orthanc Nybegynder
14. august 2001 - 09:49 Der er 13 kommentarer og
1 løsning

Æ,ø og å i Java.

Jeg har efterhånden stødt på nogen iriterende 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 promt.
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 ?
Avatar billede alexbp Nybegynder
14. august 2001 - 09:54 #1
Her er enn liste over de ESCAPE-koder man kan bruge i Java lagt ind i en klasse - prøv at bruge dem, det kan være du får success ad den vej ....

import java.applet.*;

public class UnescapeHtml extends Applet{
  // <HTML>
  //    <TABLE><TR><TD>
  //  <APPLET CODE=UnescapeHtml.class WIDTH=400 HEIGHT=100>
  //  </APPLET>
  // </HMTL>

  public void init(){
    add(new java.awt.Label
        (unescapeHTML(\" &copy; 2000  R&eacute;al Gagnon &lt;real@rgagnon.com&gt;\")));
    }

  public static final String unescapeHTML(String s){
    String [][] escape =
    {{  \"&lt;\"    , \"<\" } ,
      {  \"&gt;\"    , \">\" } ,
      {  \"&amp;\"    , \"&\" } ,
      {  \"&quot;\"  , \"\\\"\" } ,
      {  \"&agrave;\" , \"à\" } ,
      {  \"&Agrave;\" , \"À\" } ,
      {  \"&acirc;\"  , \"â\" } ,
      {  \"&auml;\"  , \"ä\" } ,
      {  \"&Auml;\"  , \"Ä\" } ,
      {  \"&Acirc;\"  , \"Â\" } ,
      {  \"&aring;\"  , \"å\" } ,
      {  \"&Aring;\"  , \"Å\" } ,
      {  \"&aelig;\"  , \"æ\" } ,
      {  \"&AElig;\"  , \"Æ\" } ,
      {  \"&ccedil;\" , \"ç\" } ,
      {  \"&Ccedil;\" , \"Ç\" } ,
      {  \"&eacute;\" , \"é\" } ,
      {  \"&Eacute;\" , \"É\" } ,
      {  \"&egrave;\" , \"è\" } ,
      {  \"&Egrave;\" , \"È\" } ,
      {  \"&ecirc;\"  , \"ê\" } ,
      {  \"&Ecirc;\"  , \"Ê\" } ,
      {  \"&euml;\"  , \"ë\" } ,
      {  \"&Euml;\"  , \"Ë\" } ,
      {  \"&iuml;\"  , \"ï\" } ,
      {  \"&Iuml;\"  , \"Ï\" } ,
      {  \"&ocirc;\"  , \"ô\" } ,
      {  \"&Ocirc;\"  , \"Ô\" } ,
      {  \"&ouml;\"  , \"ö\" } ,
      {  \"&Ouml;\"  , \"Ö\" } ,
      {  \"&oslash;\" , \"ø\" } ,
      {  \"&Oslash;\" , \"Ø\" } ,
      {  \"&szlig;\"  , \"ß\" } ,
      {  \"&ugrave;\" , \"ù\" } ,
      {  \"&Ugrave;\" , \"Ù\" } ,
      {  \"&ucirc;\"  , \"û\" } ,
      {  \"&Ucirc;\"  , \"Û\" } ,
      {  \"&uuml;\"  , \"ü\" } ,
      {  \"&Uuml;\"  , \"Ü\" } ,
      {  \"&nbsp;\"  , \" \" } ,
      {  \"&reg;\"    , \"\\u00a9\" } ,
      {  \"&copy;\"  , \"\\u00ae\" } ,
      {  \"&euro;\"  , \"\\u20a0\" } };
    int i, j, k, l ;
   
    i = s.indexOf(\"&\");
    if (i > -1) {
        j = s.indexOf(\";\");
        if (j > i) {
          // ok this is not most optimized way to
          // do it, a StringBuffer would be better,
          // this is left as an exercise to the reader!
          String temp = s.substring(i , j + 1);
          // search in escape[][] if temp is there
          k = 0;
          while (k < escape.length) {
            if (escape[k][0].equals(temp)) break;
            else k++;
            }
          if (k < escape.length) {
            s = s.substring(0 , i) + escape[k][1] + s.substring(j + 1);
            return unescapeHTML(s); // recursive call
            }
          }
        } 
    return s;
    }
}

/Alexbp - alexbp@post.tele.dk
Avatar billede cyberzed Nybegynder
14. august 2001 - 09:55 #2
I dit dos tilfælde kan det vel være et opsætningsmæssigt problem. MODE CON .......
Avatar billede disky Nybegynder
14. august 2001 - 09:56 #3

Hvis jeg husker rigtigt, er det et problem med Command Prompten som ikke er glad for æøå.

Forresten er det en dumt ting at bruge kolonne nummeret til at hente fra et ResultSet, brug hellere kolonne navnet. For ellers fucker dit program totalt up, hvis der bliver lavet om på din tabel.

Avatar billede disky Nybegynder
14. august 2001 - 09:57 #4
alexbp: den er fin men det er html koder.
Avatar billede alexbp Nybegynder
14. august 2001 - 10:04 #5
-> \'disky\' - Du har ret ... jeg var måske lidt for hurtig på atrækkeen med CTRL-C & CTRL-V ...
Avatar billede disky Nybegynder
14. august 2001 - 10:06 #6
:-) Kender jeg godt
Avatar billede orthanc Nybegynder
14. august 2001 - 10:48 #7
Selvom alexbp\'s forslag ikke kunne bruges \'gafler\' jeg det aligevel. Men jeg vil lige minde om at jeg jo netop ikke kunne søge efter f.eks \'æ\' i en String. Det går fint nok med f.eks \'c\' eller \'h\', men æ,ø og å finder den ikke.
Avatar billede logical Nybegynder
14. august 2001 - 10:58 #8
Tegnsæt :-)

Java arbejder internt med 16-bit unicode (Har vi hørt!), men skal selvfølgelig konverteres frem og tilbage til platforme, der ikke anvender 16-bit unicode.

afhængig af hvor du efterfølgende vil have resultatet henaf, skal det konverteres derefter. Hvis du f.eks. vil have det ud i en dos prompt, skal du selvfølgelig bruge det tegnsæt, der hører sig til der (Mode Con kommandoen vil fortælle hvilken code page du anvender, standard er vist 850).

Her er en eksempel på konvertering mellem unicode og 850:

public void println(String s) throws UnsupportedEncodingException {
  String converted = new String(s.getBytes(\"CP850\"));
  System.out.println(converted);
}

CP850 er ikke supporteret direkte i rt.jar, men kræver at du har i18n.jar i brug også. Det er vist nok standard idag (ihvertfald j2se1.3). Til almindelige filer i windows anbefales cp1252, som er windows\' udvidede latin-1 karakterset.

Listen over tegnsæt ligger iøvrigt her under java docs biblioteket:

docs\\guide\\intl\\encoding.doc.html

Kig også på opsætningen af mysql. mht til databaser kan du vælge en af følgende ting:
1 Lave databasens tegnsæt om til unicode
2 Lade javaklasserne konveretere mellem unicode og db tegnsæt
3 Ignorere problemet.

Den sidste kan se lidt barsk ud, men hvis det kun er java, der læser og skriver til DB bliver karakterene korrekt i den sidste ende.
Avatar billede disky Nybegynder
14. august 2001 - 11:00 #9
hej Logical:

Fed forklaring :)
Avatar billede logical Nybegynder
14. august 2001 - 11:00 #10
disky>> Man er jo selv blevet træt af det tidligere :-)
Avatar billede disky Nybegynder
14. august 2001 - 11:20 #11
hehe, det har du bestemt helt ret i
Avatar billede erk Nybegynder
15. august 2001 - 18:47 #12
Skriv i din kode følgende erstatninger for æøå
for at få dit ønskede output:

oversætelse af tegn:

&#8217; = Æ
? = Ø
? = Å
&#8216; = æ
&#8250; = ø
&#8224; = å


-Så let er det! :o)

-ERK
Avatar billede erk Nybegynder
15. august 2001 - 18:48 #13
ok surt - det kunne eksperten.dk ikke klare...
skriv din mail-adresse og så kan jeg sende dig tegnene!
Avatar billede orthanc Nybegynder
21. august 2001 - 13:11 #14
Jeg takker for bidragende og giver pointene til &#8217;logical&#8217;, for han meget gennemarbejde svar, og fordi hans sidste forslag viste sig at være løsningen på mit problem.
Mvh  orthanc
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester