Работа со специальными символами в URL с использованием Java - PullRequest
0 голосов
/ 20 сентября 2009

Я написал Java-программу для генерации файла m3u на основе компакт-диска, скопированного с k3b, который в значительной степени сохраняет специальные кодировки символов в названиях исполнителей, альбомов и дорожек. Затем я помещаю эти файлы m3u на сервер и создаю веб-приложение GWT, где имя файла m3u является целью тега привязки HTML. В 99 +% случаев все это работает отлично. В некоторых случаях специальные символы приводят к сбою ссылки.

Один из неудачных примеров - Movits! album Äppelknyckarjazz (обратите внимание на первый символ, который кодируется конструктором URI как% C3% 84). Поскольку клиент GWT, источник просмотра не показывает ссылку :-( Но при наведении на ссылку Firefox показывает правильно декодированный URL-адрес. При нажатии на ссылку Firefox завершается с ошибкой: «... ... ppelknyckarjazz.m3u был не найден на этом сервере "Как будто в игре используются разные схемы кодирования символов, но, честно говоря, у меня болит мозг, пытаясь разгадать загадку на этом уровне.

Итак, на самом деле есть два вопроса:

1) Моя проблема - проблема со схемой кодирования?

2) Если это так, как я могу поддерживать согласованность с учетом различных частей приложения (генератор Java m3u, клиент GWT, браузер Firefox, веб-сервер Apache).

Ответы [ 3 ]

3 голосов
/ 20 сентября 2009
String result = java.net.URLEncoder.encode("Äppelknyckarjazz", "UTF-8");

Я думаю, что это решение для вас.

0 голосов
/ 21 сентября 2009

Сначала вы должны объявить кодировку на своей HTML-странице. Best ist UTF-8.

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

Затем вы должны настроить свой веб-сервер для интерпретации запросов от клиентов как UTF-8. При использовании tomcat установите параметр URIEncoding в теге Connector:

<Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8" />
0 голосов
/ 20 сентября 2009

Ä может быть закодировано как% C3% 84 (UTF8) или% C4 (Latin1). Похоже, вы используете смесь Latin11 и UTF8. Вы должны убедиться, что одна и та же кодировка используется во всех ваших системах.

В редких случаях, когда вы не можете контролировать кодировку, см. Мой ответ на этот вопрос,

Как определить, содержит ли строка недопустимые закодированные символы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...