#servlets #character-encoding
#сервлеты #кодирование символов
Вопрос:
привет, я обмениваюсь данными между методом http-клиентской публикации и сервлетом. если я отправляю английские символы, проблем нет, но если я отправляю на иврите, я получаю????? вместо иврита я использую UTF-8. вот код клиента
HttpPost post = new HttpPost("http://localhost:8080/dropboxweb/Delete");
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
3);
nameValuePairs.add(new BasicNameValuePair("fullpath",full.toString()));
nameValuePairs.add(new BasicNameValuePair("filename",name));
nameValuePairs.add(new BasicNameValuePair("user",Config.getInstance().getUsername()));
post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = client.execute(post);
и это сервлет
//response.setContentType("text/html;charset=windows-1255");
//response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
final String full_path = request.getParameter("fullpath");
я перепробовал все варианты в // ни один не сработал.
я использую tomcat 7.
пожалуйста, помогите
Ответ №1:
Обратитесь к этому, (это помогло мне) Что вы можете порекомендовать, чтобы все заработало? (Как использовать UTF-8 везде) http://wiki.apache.org/tomcat/FAQ/CharacterEncoding#Q3
Ответ №2:
На стороне клиента вам необходимо убедиться, что следующие строки действительны.
nameValuePairs.add(new BasicNameValuePair("fullpath", full.toString()));
nameValuePairs.add(new BasicNameValuePair("filename", name));
nameValuePairs.add(new BasicNameValuePair("user", Config.getInstance().getUsername()));
Проверьте их с помощью
System.out.println("fullpath: " full.toString());
System.out.println("filename: " name);
System.out.println("user: " Config.getInstance().getUsername());
На стороне сервера вам необходимо убедиться, что вызывается следующая строка, прежде чем вы получите какой-либо параметр запроса.
request.setCharacterEncoding("UTF-8");
Вам также необходимо убедиться, что извлеченные значения обрабатываются как UTF-8 в остатке процесса. Например, при записи в файл, или печати в консоль стандартного вывода, или вставке в базу данных, все эти задания также должны быть проинструктированы использовать UTF-8.
Смотрите также:
Ответ №3:
Насколько я знаю, текущая грамматика [RFC 1521] ограничивает значения параметров (и, следовательно, имя файла) US-ASCII. Вы должны URL кодировать имя файла на клиенте, а URL декодировать его на сервере.
Комментарии:
1. HttpClient и Servlet API уже неявно выполняют кодировку URL. Мое лучшее предположение заключается в том, что
System.out.println()
целевая консоль просто не настроена на использование UTF-8.