![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
seth |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 4.6.2006 Репутация: 1 Всего: 1 |
Есть jsp и bean (в котором описаны функции для загрузки или записи строки в БД)
БД MySql с cp1251 если на jsp выставлять кодировку utf-8 то с БД читается все нормально если на jsp выставлять кодировку cp1251 то записуется в БД все нормально есть одна страничка на которой совмещены эти функции: соответственно необходимо преобразовывать... Пробовал это: String newString = new String(oldString.getBytes("UTF-8"), "Cp1251"); не хочет... ![]() кто что посоветует?? |
|||
|
||||
Nobody |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 25.8.2003 Где: Россия, Москва Репутация: 1 Всего: 16 |
Посоветую выкинуть 1251 и делать всё в юникоде.
-------------------- |
|||
|
||||
Tony |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: 6 Всего: 12 |
Согласен.Пиши всё в UTF-8. |
|||
|
||||
seth |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 4.6.2006 Репутация: 1 Всего: 1 |
хммм - на UTF-8 ничего не получилось - написал на 1251 (т.к. БД в 1251) |
||||
|
|||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
||||
|
||||
Maksym |
|
|||
![]() . ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 24 Всего: 62 |
seth
Что имеется в виду под "ничего не получилось"? где именно сбоит кодировка? |
|||
|
||||
seth |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 4.6.2006 Репутация: 1 Всего: 1 |
|
||||
|
|||||
Maksym |
|
|||
![]() . ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 24 Всего: 62 |
Вот такое дело где-нибудь присутствует:
request.setCharacterEncoding("UTF-8"); ? |
|||
|
||||
seth |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 4.6.2006 Репутация: 1 Всего: 1 |
пробовал - не помогает... ![]() проблема решилась с установкой кодировки в windows-1251 Это сообщение отредактировал(а) seth - 28.9.2006, 23:12 |
|||
|
||||
Stampede |
|
|||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
seth, тут похоже вот что происходит. В браузер-серверном взаимодействии есть несколько мест, где программным компонентам требуется знать кодировку. Давай сначала рассмотрим ситуацию с чтением из базы - то, что ты называешь:
Ты говоришь, что база в 1251. Значит, драйвер базы все делает правильно, и база тут вообще ни при чем. То есть дело в том, как происходит конвертация между внутренним представлением символов Java (Unicode) и тем, как они передаются по сети и/или отображаются в браузере. Поэтому давай по порядку. Сначала тебе надо засунуть твой вывод в поток в правильной кодировке. Для этого существует метод response.setCharacterEncoding("UTF-8"). Можно также воспользоваться методом response.setContentType("text/html;charset=UTF-8") - это приведет к такому же эффекту. Но здесь имеются всякие подводные грабли, о которых следует знать. Во-первых, установка кодировки ответа должна быть произведена до первого обращения к response.getWriter(). Это потому что выводной поток создается сразу в той кодировке, которая указана (или дефолтной, 8859-1). Так что если поток уже создан, все последующие попытки установить какую бы то ни было кодировку игнлрируются. У тебя как у разработчика не всегда есть контроль над тем, в какой момент происходит получение Writer'а, поэтому одно из простых решений - это написать фильтр, который будет выставлять нужную кодировку еще до всякой обработки. Правда, это подходит только для ситуаций, когда кодировка одна для всего сайта. Именно поэтому есть смысл прислушаться к мнению товарищей, предлагавших тебе все делать в UTF-8, ибо с ней можно вообще забыть, что есть какая-то проблема кодировок. Более того, с UTF-8 становится возможным выводить на странице смесь на разных языках, и каждый язык будет отображаться корректно. В случае с JSP возникает еще одна проблема: там выражение <%@ page contentType="text/html;charset=UTF-8" %> в том числе сообщает контейнеру о том, в какой кодировке читать исходный JSP файл. Поэтому если выводим в UTF-8, то и JSP файл нужно сохранять в UTF-8, а не то получим вопросики вместо русских букв. Ты говоришь, что при кодировке UTF-8 русские буквы из базы отображаются нормально. Хорошо, давай для начала убедимся, что все присходит так, как мы думаем должно происходит. Например, узнаем, какие заголовки приходят со страницей. Это можно посмотреть, например, в Firefox с устагновленным плагином Web Developer Extension. Еще хорошо было бы узнать, не прописан ли мета-тег <meta http-equiv="Content-Type" content="..."> внутри тега <head> приходящей страницы, и если да, то что там внутри атрибута content. Дальше будем плясать от этого. Добавлено @ 00:40 Пока писал ответ, пришло сообшение о решении проблемы. Я только хочу предупрелить seth, что это не решение, а лишь отсрочка. Потому что где-то что происходит не так, как должно происходить. Например, для меня это означает, что браузер шлет POST-данные в windows-1251 - и скорее всего только потому, что это умолчальная локаль на данном конкретном компьютере. Если попробовать то же самое с машины, где локаль английская, то скорее всего в базу попадут кракозябры. Между тем браузер обязан засылать ввод в той кодировке, в котрой получил страницу. Так что давай все-таки смотреть на заголовки ответа. |
|||
|
||||
Maksym |
|
|||
![]() . ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1456 Регистрация: 19.8.2005 Где: Odessa, Black Sea Репутация: 24 Всего: 62 |
Stampede
Великолепный ответ, аплодирую! ![]()
По этому поводу, tux дал готовый рецепт здесь. |
|||
|
||||
seth |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 4.6.2006 Репутация: 1 Всего: 1 |
Спасибо за ответ - к сожалению ничего конкретного добавить не могу - необходимо было перенастраивать систему
![]() ну могу кое что добавить - таблицу в mysqle сделал на utf-8 На страничке такое:
при дебаге в бин приходит такое: Õàðüêîâ т.е. вроде UTF-8 и все правильно - только на страничке отображается точно также (т.е. крокозябры) |
|||
|
||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
seth, вот это:
совсем не то, что должно быть, должны быть обычные русские буквы. Как ты выполняешь подключение к MySQL? У тебя в url подключения есть параметры useUnicode и characterEncoding? Строка подключения должны выглядеть примерно так:
|
|||
|
||||
Stampede |
|
|||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 66 Всего: 144 |
Вот это, кстати, выглядит обнадеживающе (я могу даже сказать, что там написано что-то про твой город ![]() И по прежнему нет ответа на жизненно важный вопрос: какие заголовки HTTP приходят со страницей. |
|||
|
||||
seth |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 4.6.2006 Репутация: 1 Всего: 1 |
прописал это в подключении - ничего не изменилось ![]() вотъ бин
строка подключения: jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=utf-8 ЗЗЫ про заголовки - сейчас буду смотреть - хотя нужно ли это на данный момент - пока запись в БД мы не обсуждаем... ЗЗЗЫ использую коннектор mysql-connector-java-3.0.11-stable-bin.jar Это сообщение отредактировал(а) seth - 30.9.2006, 19:57 |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |