J'ai une chaîne Uri comme suit: p>
http: //www.christlichepArteI%F6SterRechs.at/steériermark/ P > blockQuote>
Je crée une instance Java.Lang.uri avec cette chaîne et cela réussit mais quand je veux récupérer l'hôte, il renvoie Null. Opera et Firefox s'étouffent également sur cette URL si je le saisi exactement comme indiqué ci-dessus. Mais la classe URI ne devrait-elle pas lancer une exception URISYNTAXEXEXEXE si elle est invalide? Comment puis-je détecter que l'URI est illégal alors? P>
Il se comporte également de la même manière lorsque je décode la chaîne en utilisant Urldecoder qui donne p>
http: // www .christlicheparteiösterreichs.at / steiermark / p> blockQuote>
Maintenant, cela est accepté par opéra et firefox mais java.net.uri ne l'aime toujours pas. Comment puis-je traiter avec une telle URL? P>
merci p>
3 Réponses :
La bonne façon de coder les caractères non-ASCII dans les noms d'hôte est connu sous le nom de "Punycode" . p>
Java 6 a idn code >
classe pour travailler avec des noms de domaine internationalisés. Donc, la suivante produit URI avec nom d'hôte codé:
IDN # TOASCII CODE> est destiné uniquement à fonctionner sur des étiquettes ou des noms de domaine complet, pas des chaînes d'URI totales. Cela peut causer des conséquences inattendues.
uri jette un URISYNTAXEXCEPTION , lorsque vous choisissez le constructeur approprié:
public static URI createSafeURI(final URL someURL) throws URISyntaxException { return new URI(someURL.getProtocol(),someURL.getUserInfo(),IDN.toASCII(someURL.getHost()),someURL.getPort(),someURL.getPath(),someURL.getQuery(),someURL.getRef()); } URI raoul=createSafeURI(new URL("http://www.christlicheparteiösterreichs.at/steiermark/readme.html#important"));
Salut. Merci de votre réponse, mais comment le constructeur d'URI m'aida-t-il lorsque je n'ai pas les parties individuelles de l'URL? C'est un peu un problème de poulet et d'œuf :)
Vous avez raison. Cela dépend d'où obtenez-vous vos données. Si vous obtenez une chaîne comme " christlicheparteiösterreich.at / steiermark comme entrée, vous ne pouvez tout simplement pas l'utiliser Dans la nouvelle URI (chaîne), parce que les États Javadoc, il veut une chaîne URI déjà correcte. Mais cette chaîne n'est pas. Vous devez vérifier où dans la chaîne de Dataflow est "corrompue". D'où vient cette chaîne?
Bonjour, merci d'avoir pris le temps de regarder cela. La suggestion de votre mise à jour semble prometteuse, je peux probablement travailler avec ça. Merci encore!