2013-12-23 1 views
-1

У меня возникают проблемы с загрузкой и разбором файла в виде строк UTF-8. Я использую следующий код:Servlet не анализирует загруженный файл как UTF-8

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    Part filePart = request.getPart("file"); 
    InputStream filecontent = filePart.getInputStream(); 
    // ... 
} 

И мой веб-страница выглядит следующим образом:

<%@ page language="java" contentType="text/html; charset=UTF-8" 
     pageEncoding="UTF-8"%> 
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    </head> 
    <body> 
    <form action="UploadServlet" method="post" enctype="multipart/form-data"> 
     <input type="file" name="file" /> 
     <input type="submit" /> 
    </form> 
    </body> 
</html> 

Я нашел большой post о UTF-8 кодировкой в ​​Java WebApps, но, к сожалению, она не работает для меня , У меня все еще есть случайные символы в строках в отладчике NetBeans, и когда я показываю их на веб-странице, хотя большинство из них отображаются правильно, некоторые кириллические буквы (я, с, Н, А) заменяются на « ?»

+1

Проблема заключается в коде, который использует этот поток filecontent, который вы нам не показали. – bmargulies

+0

@bmargulies Я не показывал это специально, потому что я портировал его из настольного приложения, и он отлично работал там. – prazuber

+1

Возможно, у вас другая кодировка по умолчанию. – bmargulies

ответ

2

Загрузка файла с помощью HTML-формы не использует кодировку символов. Файл передается байтом по байту как есть. См. here в разделе «multipart/form-data».

Так что если исходный файл со стороны клиента является текстовым файлом с кодировкой символов UTF-8, то на стороне сервера это также UTF-8.

Затем вы можете использовать InputStreamReader декодировать байты в UTF-8 текст:

InputStreamReader reader = new InputStreamReader(filecontent, "UTF-8"); 

Вот и все.

0

javax.servlet.http.Part, то, что вы используете в самой первой строке вашего кода, имеет на нем метод getContentType(), который расскажет вам, какой тип содержимого данных загруженной формы. Ничто из того, что вы написали до настоящего времени, не сдерживает загруженные данные формы для любого набора символов; ergo вам нужно определить набор символов и обработать его соответствующим образом.

Смежные вопросы