Отображение закодированного текста WINDOWS-1252 из файла в виде HTML
У меня есть текстовый файл с символами WINDOWS-1252, такими как ø и ß. файл загружается через форму отправки сервлету, где он анализируется с opencsv и возвращается как объект списка на страницу jsp, где он отображается. символы utf-8 отображаются как? и я пытаюсь выяснить, где по пути кодирование могло пойти не так. Я пробовал кучу вещей:
моя страница имеет тег
<%@page contentType="text/html" pageEncoding="WINDOWS-1252"%>
входной файл закодирован -
new FileInputStream(file), "WINDOWS-1252")
каждая строка кодируется -
s = new String(s.getBytes("WINDOWS-1252"));
где еще может произойти сбой кодировки? есть идеи?
2 ответа
ОК проблема исправлена. Первая проблема заключалась в том, что это был не файл utf-8, а файл WINDOWS-1252. Я решил, что с помощью библиотеки Juniversalchardet (очень полезный и простой в использовании). Затем я должен был убедиться, что я читаю файл с нужной кодировкой, используя FileInputStream:
new FileInputStream(file), "WINDOWS-1252")
я просто должен был убедиться, что я отображаю его с правильным набором символов в файле JSP, используя тег <%@page contentType="text/html" pageEncoding="WINDOWS-1252"%>
это довольно много
(1) определить кодировку
(2) убедитесь, что вы правильно читаете файл
(3) убедитесь, что вы отображаете это правильно
Некоторые предложения по устранению неполадок:
Отладьте печать или иным образом изучите текст как шестнадцатеричный на разных этапах и убедитесь, что кодировка действительно соответствует ожидаемой.
Убедитесь, что нет BOM (Byte Order Marker), и посмотрите этот вопрос и ссылки в нем, если он есть, и у вас нет простого способа избавиться от него: чтение UTF-8 - маркер BOM