Avatar billede dsj Nybegynder
10. september 2003 - 11:51 Der er 15 kommentarer og
1 løsning

Hvilket charset følger RFC 1738

Jeg skal med...

URLEncoder.encode(String s, String enc);

... have encodet jf RFC1738-standarden, men hvad hedder det charset, der følger den? F.eks. følger UTF-8 RFC2279...
Avatar billede zogu Nybegynder
10. september 2003 - 12:01 #1
Kig her :
http://www.faqs.org/rfcs/rfc1738.html

Umiddel bart læser jeg at den bruger US-ASCII.
Avatar billede arne_v Ekspert
10. september 2003 - 12:11 #2
Encodingen selv hedder bare URL encoding.

Output fra den encoding er US-ASCII.

Det andet argument angiver hvilket encoding der bruges som "midlertidig
tilstand".

Altså:

1 tegn --(ISO-8859-1 encoding)--> 1 byte --(URL encoding)--> %nn

1 tegn --(UTF-8 encoding)--> 2 bytes --(URL encoding)--> %nn%mm
Avatar billede dsj Nybegynder
10. september 2003 - 12:20 #3
Problemet med UTF-8 er, at spaces erstattes med '+' jf. RF2279, men jeg skal bruge '%20' i stedet, jf. RFC1738....
Avatar billede arne_v Ekspert
10. september 2003 - 12:36 #4
Øh.

Håndteringen af space har næppe noget med UTF-8 versus ISO-8859-1 at
gøre. Det er kun >=128 tegnene det påvirker.

Hvis jeg husker rigtigt så skal man bruge %20 før ? og + efter ?.

Men jeg har lige testet og du har ret URLEncoder er meget glad for + !
Avatar billede dsj Nybegynder
10. september 2003 - 13:08 #5
Det er fordi + erstatter space jf. RFC 2279.

Men jf. RFC1738 erstatter %20 space... Hvilket charset er det så man skal bruge for at gøre dette?
Avatar billede arne_v Ekspert
10. september 2003 - 13:20 #6
Det har intet med karakter sæt at gøre.

Og jeg forstår ikke det med RFC'erne. RFC 2279 er en generel beskrivelse
af UTF-8 og har mig bekendt intet med URL'er at gøre. RFC 1738 bruger
%20 men går ikke ind i detaljer om før og efter ? i HTTP.
Avatar billede arne_v Ekspert
10. september 2003 - 13:31 #7
Men da URLEncode encode tilsyneladende er lavet til brug
for form data, så er det vel ike andet for end at du laver
din egen lille replaceAll !?
Avatar billede dsj Nybegynder
10. september 2003 - 13:50 #8
Du tænker altså på med String.replaceAll erstatte alle + med %20 - men hvordan ved jeg at RFC2279 udover space gør det samme som RFC1738 ?

Og hvordan skriver man det egentlig ?

String myString = "...";
myString = myString.replaceAll("+", "%20");

Sidste linie smider nemlig en PatternSyntaxException...
Avatar billede arne_v Ekspert
10. september 2003 - 19:47 #9
Jeg ville kalde replaceALl først.

Eksempel:

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

public class Enc {
    public static void main(String[] args) throws Exception {
        System.out.println(URLEncoder.encode("Æ Ø Å", "UTF-8"));
        System.out.println(specialEncode("Æ Ø Å"));
    }
    public static String specialEncode(String s) throws UnsupportedEncodingException {
        return URLEncoder.encode(s.replaceAll(" ", "%20"), "UTF-8");
    }
}
Avatar billede arne_v Ekspert
10. september 2003 - 19:48 #10
I modsætning til hvad man umiddelbart tror så er det første argument
til replaceAll ig en normal søge-streng men en regular expression.

Og + har en speciel betydning i regular expressions.
Avatar billede dsj Nybegynder
10. september 2003 - 22:23 #11
specialEncode vil vel ikke virke i praksis, da strengen vil blive dobbelt-encodet. Space vil først blive erstattet af %20, og derefter vil '%' igen blive encodet...
Avatar billede arne_v Ekspert
10. september 2003 - 22:27 #12
Det har du ret i. Men så vender vi den bare om og escaper plus:

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

public class Enc {
    public static void main(String[] args) throws Exception {
        System.out.println(URLEncoder.encode("Æ Ø Å", "UTF-8"));
        System.out.println(specialEncode("Æ Ø Å"));
    }
    public static String specialEncode(String s) throws UnsupportedEncodingException {
        return URLEncoder.encode(s, "UTF-8").replaceAll("\\+", "%20");
    }
}
Avatar billede dsj Nybegynder
10. september 2003 - 23:13 #13
Ahhh det er "\\+" man skal skrive, kunne nemlig ikke få det til at virke med "+" :)
Avatar billede dsj Nybegynder
10. september 2003 - 23:14 #14
Fordi det har en betydning ja...
Avatar billede arne_v Ekspert
27. september 2003 - 13:45 #15
Ja.

replaceAll bruger regex.

Tid at lukke ?
Avatar billede dsj Nybegynder
27. september 2003 - 18:48 #16
Jep, det må det være. Forskellen på 2279 og 1738 er meget mere end '+' og '%20'. Jeg tyvstjal 1738-encoderen fra Netscape :)
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

IT-JOB

Digitaliseringsstyrelsen

Systemforvalter til borger.dk

Capgemini Danmark A/S

IGNITE Graduate Program 2026

Netcompany A/S

IT Consultant

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Senior Platform Engineer