2009-09-20 13 views
0

J'ai écrit un programme Java pour générer un fichier m3u basé sur un CD extrait de k3b qui préserve à peu près les encodages de caractères spéciaux dans les noms d'artiste, d'album et de piste. Je place ensuite ces fichiers m3u sur un serveur et génère une application Web GWT où le nom de fichier m3u est la cible d'une balise d'ancrage HTML. Pour 99% des cas, tout cela fonctionne parfaitement. Dans certains cas, les caractères spéciaux provoquent l'échec du lien.Traiter des caractères spéciaux dans une URL en utilisant Java

Un exemple est le Movits! album Äppelknyckarjazz (notez le premier caractère codé par un constructeur d'URI en% C3% 84). Puisque le client est GWT, la source de la vue n'affiche pas le lien, :-(Mais lorsque vous survolez le lien, Firefox affiche l'URL correctement décodée.En cliquant sur le lien, Firefox échoue avec: "... Ã" ppelknyckarjazz.m3u pas trouvé sur ce serveur » Il est comme si différents schémas de codage de caractères sont en jeu, mais franchement mon cerveau est mal à essayer de démêler le casse-tête à ce niveau

donc, il y a vraiment deux questions:.

1) Mon problème est-il un problème d'encodage?

2) En supposant que c'est le cas, comment puis-je maintenir la cohérence compte tenu des différentes parties de l'application (Java m3u generater, client GWT, navigateur Firefox, serveur web Apache).

Répondre

0

Ä peut être codé en% C3% 84 (UTF8) ou% C4 (Latin1). On dirait que vous utilisez un mélange de Latin11 et UTF8. Vous devez vous assurer que le même codage est utilisé sur tous vos systèmes.

Dans de rares cas que vous ne pouvez pas contrôler le codage, voir ma réponse à cette question,

How to determine if a String contains invalid encoded characters

+0

Parmi les deux réponses, ceci en arrivera à la substance de la question. Et le matériel référencé capture l'essence de la question. Merci beaucoup. -pmr – pajato0

3
String result = java.net.URLEncoder.encode("Äppelknyckarjazz", "UTF-8"); 

Je pense que c'est une solution pour vous.

+0

Je crois que j'obtiens ce résultat en utilisant le constructeur URI. Le nom de fichier m3u et le contenu du fichier sont codés correctement. – pajato0

+0

URLEncoder encode les corps POST, pas les URL (un piège commun) – mauhiz

+0

TBH: Je pense que vous avez tort. Peux-tu élaborer? –

0

D'abord, vous devez déclarer un charset sur votre page HTML. Le meilleur est UTF-8. Ensuite, vous devez configurer votre serveur Web pour interpréter les requêtes des clients en UTF-8. Lors de l'utilisation de tomcat, définissez le paramètre URIEncoding sur votre connecteur:

<Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8" /> 
Questions connexes