| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Кодировка в выборке из MsSQL 2000 через JDBC |
| Автор: zuzukrukov 3.9.2009, 19:41 | ||||||
| Есть сервлет, который осуществляет подключение к базе MsSQL 2000 и делает оттуда выборку, а затем отправляет полученные данные клиенту. Но в браузере выводится текст с неправильной кодировкой (латинские символы с черточками, точечками и прочими). Что проверял: 1. Кодировку response. 2. Кодировку всей статики 3. Пытался конвертировать полученный String в другую кодировку (в браузере появлялись знаки вопроса):
Что НЕ пробовал (на выбранные кодировки не обращайте внимания):
Попробую завтра с утра. Используемый код:
При написании кода создавалась тестовая база MsSQL 2000 и он работал корректно. При подключении к рабочей базе - появляется описанная проблема. Какая кодировка стоит на рабочей базе не могу сказать точно, но вроде бы как Cp1251. |
| Автор: Hidrag 4.9.2009, 10:56 |
| 1. Узнать в какой кодировке хранятся данные в БД 2. В какой кодировке выводишь в браузер. Иногда советуют вместо родного драйвера от МС использовать jTDS драйвер... |
| Автор: zuzukrukov 4.9.2009, 13:32 | ||
| Огромное спасибо за помощь. Проблема решена. Почему такое было: Сама база хранит записи в кодировке Cp1251, а данные туда запихивались в latin1 (так и не понял зачем. Скорее всего были дефолтные установки). При выборке данных с помощью метода getString() строка записывалась в кодировке Cp1251 (так как их хранит база). Почему не сработало конвертирование, которое я указал в предудыщуем посте:
Потому что если в методе getBytes() не указывать кодировку, то никакого преобразования не происходит. И, наконец, рабочий код: String fio = new String(rs.getString("fio").getBytes("latin1"),"Cp1251"); В переменную fio записаны данные в правильной кодировке (в данном случае в Cp1251). |