2010-11-11 1 views
1

я использовалс использованием StringWriter получения проблем с кодировкой

StringWriter writer = new StringWriter(); 
request.setCharacterEncoding("ISO-8859-1"); 
response.setContentType("text/html;charset=ISO-8859-1"); 
pw =response.getWriter(); 
IOUtils.copy(sImage, writer); 
theString = writer.toString(); 
pw.write(theString); 
pw.flush(); 

В браузере клиента я получаю выход в

< Yth HTML xmln s: V = "урна: схемы-Microsof t - c o m : v m l " x m l n s : o = " u r n : s Chemas-Microsoft-ком: офи c e : o f f i c e " x m l n s : w = " u r n : s с Hemas-Microsoft-ком: офиц e : w o r d " x m l n s : x = " u r n : s c h e MAS-Microsoft-ком: офис: e x c e l " x m l n s : p = " u r n : s c h e m в-Microsoft-ком: офис: р o w e r p o i n t " x m l n s : a = " u r n : s Chemas-Microsoft-ком: офи c e : a c c e s s "

Если кто из вас, ребята, знает это, как я могу решить эту проблему

+0

Что находится в sImage? Если это двоичные данные, текст/html явно ошибочен. –

+0

@Jim: Это HTML в кодировке UTF-16LE. (Прочитайте каждый второй символ.) –

+0

Хорошо, тогда ответ Криса Шут-Юнга правильный. Настройка заголовков содержимого и заголовков символов фактически не делает выходным. Вы должны сделать это, установив соответствующую кодировку в записи. Либо установите заголовки в соответствие с фактическими данными, либо преобразуйте данные в соответствие с заголовком ISO-8859-1. –

ответ

1

Попробуйте использовать это:

response.setContentType("text/html; charset=UTF-16LE"); 

Конечно, это не делает ваш текст ISO-8859-1, но большинство браузеров не имеют никаких проблем с поддержкой UTF-16 в эти дни.

+0

Я получаю символ ÿþ на вершине..ая идея, что это такое ??? – pras

+0

@pras: Вашему браузеру не нравится знак байта (BOM)? Попробуйте использовать 'UTF-16' вместо' UTF-16LE'. Хотя ваш браузер нарушает RFC 2781, в котором говорится, что BOM предполагается принять (но необязательно), если используется 'UTF-16LE'. –