Avatar billede mik28 Seniormester
18. februar 2011 - 10:47 Der er 12 kommentarer og
1 løsning

hejs på encoding

Hej Eksperter

Jeg har et feed på min side som indeholder æøå. Desværre giver det nogle problemer. Siden jeg skal vise feedet på er

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

Det kan jeg ikke lave om på. Feedet er UTF8. ø bliver til ø Hvordan retter jeg det? Jeg kan gøre sådan

minTekst.item(i).getNodeValue().replaceAll("ø","ø");

men det har jeg ikke så meget lyst til. Har prøvet med StringEscapeUtils, men kan ikke finde ud af hvilken metode jeg skal bruge
Avatar billede mik28 Seniormester
18. februar 2011 - 10:53 #1
Det er tilsyneladende her det går galt

String s = method.getResponseBodyAsString();

kan som sagt gøre således

String s = method.getResponseBodyAsString().replaceAll("ø","ø");

men det er jo hverken en særlig holdbar eller elegant løsning
Avatar billede johny Nybegynder
18. februar 2011 - 16:37 #2
Jeg er ikke lige så skarp i encoding, men hvis det er et problem der skal løses her og nu, kan du jo pakke det ind i en "Util klasse", som du så kan ændre på senere:

public static class EncodingUtil
{
  public static string ReplaceWronglyEncodedDanishCharacters(string s)
  {
    if (System.String.IsNullOrWhiteSpace(s))
    {
      return s;
    }
   
    var replacementPairs = new System.Collections.Generic.List<System.Tuple<string, string>>();
    replacementPairs.Add(new System.Tuple<string,string>("æ", "æ"));
    replacementPairs.Add(new System.Tuple<string,string>("ø", "ø"));
    replacementPairs.Add(new System.Tuple<string,string>("Ã¥", "å"));
    replacementPairs.Add(new System.Tuple<string,string>("Ã ", "Æ"));
    replacementPairs.Add(new System.Tuple<string,string>("ÃÜ", "Ø"));
    replacementPairs.Add(new System.Tuple<string,string>("Ã&", "Å"));
    foreach (System.Tuple<string, string> replacePair in replacementPairs)
    {
      s = s.ReplaceAll(replacePair.Item1, replacePair.Item2);
    }
  }
}

Er godt klar over det ikke er nogen god løsning, men hvis det er noget der skal op at køre her og nu, så skulle du trods alt være videre.
Avatar billede johny Nybegynder
18. februar 2011 - 16:38 #3
Oops, og selvfølgelig med et "return s;" til sidst.
Avatar billede arne_v Ekspert
18. februar 2011 - 17:46 #4
1) den rigtige løsning må være at få læst de data med korrekt encoding i første omgang

2) som workaround prøv:

s = new String(s.getBytes("ISO-8859-1"), "UTF-8");
Avatar billede johny Nybegynder
18. februar 2011 - 17:55 #5
Helt enig arne_v. Var bare et forslag til netop en workaround, indtil der var nogen der kom med en permanent løsning. :) (eller en bedre work around)
Avatar billede mik28 Seniormester
19. februar 2011 - 14:37 #6
det er irriterende fordi det hele burde være utf-8. Forstår ikke helt hvorfor det går galt
Avatar billede arne_v Ekspert
19. februar 2011 - 20:31 #7
Enten må du ændre den måde du læser/skriver feed på eller så må du konvertere data.

Jeg gav også et konkret forslag til det sidste.
Avatar billede mik28 Seniormester
21. februar 2011 - 11:04 #8
tak for hjælpen
Avatar billede arne_v Ekspert
22. februar 2011 - 03:41 #9
Hvad blev løsningen så?
Avatar billede mik28 Seniormester
12. marts 2011 - 09:05 #10
jeg lavede bare en simple replaceAll. Det er ikke kritisk
Avatar billede mik28 Seniormester
28. marts 2011 - 13:29 #11
vil meget gerne lukke, men mangler et svar ;-)
Avatar billede arne_v Ekspert
28. marts 2011 - 15:16 #12
Hvis du laver en replace er det vel johnu som slam smide et svar.

(ogsaa selvom koden ligner C# og ikke Java)
Avatar billede mik28 Seniormester
09. august 2011 - 08:36 #13
Mangler stadigt et svar og lukker nu selv
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