|
|
|
Кириличные символы в веб приложении
|
|||
|---|---|---|---|
|
#18+
Привет люди! Снова есть баг) Есть веб проект на JSF, работает на Glassfish сервере. Как БД использует MySQL. В самом проекте есть сервлет-фильтр, которий перекодирует все дание, которые приходят от запросов (GET, POST) в UTF-8. Схема и таблицы в MySQL тоже в UTF-8. Даже в настройках пула на Glassfish стоит CharacterEncoding=UTF-8. Этот проект общается с другим таким проектом с помощю SOAP. Все собщения шыфруются с помощю симетрических ключей "DSA". Теперь представте что два єтих приложения стоят на Windows. Они обмениваются сообщения ми на кирилице и все нормально. А вот если одно приложение на Windows, а другое на Linux, то все кириличные сообщения портятся, непонятно почему. Тобто все кириличные даные, которые приходят с Windows на Linux (и на оборот) через SOAP, портятся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 11:40:12 |
|
||
|
Кириличные символы в веб приложении
|
|||
|---|---|---|---|
|
#18+
Стока всего наплели. Используйте отладку. Локализуйте проблему. Она в SOAP? Тогда при чему тут JSF и БД? Покажите как именно портится текст. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 11:43:21 |
|
||
|
Кириличные символы в веб приложении
|
|||
|---|---|---|---|
|
#18+
Вот такое выходит: "РґРєРёР№" Если смотреть в дебегере, то видно: что з на Windows в момет отправки через SOAP все нормально. А вот на Linux приходят крякозябры. Код: java 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 11:52:32 |
|
||
|
Кириличные символы в веб приложении
|
|||
|---|---|---|---|
|
#18+
denis11111, в SOAP не важен отправитель. Т.е. на какой он платформе и т.д. Смотрите и трассируйте сам SOAP пакет и его содержимое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 12:09:53 |
|
||
|
Кириличные символы в веб приложении
|
|||
|---|---|---|---|
|
#18+
Тут очевидно что UTF8 прочитан как CP1251, но кто не в курсе берем http://www.artlebedev.ru/tools/decoder/ и оно нам подтверждает. Тем более удивительно что это происходит в Windows->Linux. В другую сторону я бы ещё мог понять. Какими средствами происходит работа с SOAP? Можете ли сделать дамп SOAP/HTTP в файл, и проверить содержимое файла на правильность кодировки. Какое отношение к этому может иметь фильтр и что значит "перекодирует"? Может у вас формируется текст под виндой в CP1251, ломая UTF-8, и вы своим фильтром восттанавливали обратно CP1251, а при переходе не Linux отправка стала работать в UTF-8, но ваш фильтр всё ещё не верно трактует это как CP1251? Что конкретно делает фильтр и как это относится к SOAP? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 12:11:46 |
|
||
|
Кириличные символы в веб приложении
|
|||
|---|---|---|---|
|
#18+
denis11111, Вияснилось, що String в JAVA по умолчанию UTF-16. И если делать так: Код: java 1. То крякозябры пропадают. Вроде как и решение, но на каждую строку ставить такое как-то не выход... Может есть какие идеи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 12:13:02 |
|
||
|
Кириличные символы в веб приложении
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Ищо раз проверили. Действительно, только из Linux в Windows. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 12:15:35 |
|
||
|
Кириличные символы в веб приложении
|
|||
|---|---|---|---|
|
#18+
denis11111Вияснилось, що String в JAVA по умолчанию UTF-16. facepalm... Это представление данных в памяти, оно к вашей проблеме вообще никакого отношения не имеет denis11111 Код: java 1. Это бред, потому что getBytes() использует текущую кодировку. В вашем случае Код: java 1. Т.е. у вас был текст в UTF-8 и вы его невалидно интерпретировали где-то как CP1251. Этой операцией вы пытаетесь восстановить данные делая преобразование в обратном порядке. Получить из String CP1251 и интерпретировать как UTF-8. Это костыль, при чем со своими побочными эффектами. Какие-то символы могут не восстановится в таком преобразовании. "Щ" что ли... не помню точно. denis11111То крякозябры пропадают. Вроде как и решение, но на каждую строку ставить такое как-то не выход... Может есть какие идеи? Всё традиционно. Проблему нужно локализовать и устранить. Локализация происходить двоичным поиском. Делим попалам - справа Win, слева Линь. Посередине SOAP. Далем дамп запроса и ответа. Смотрим кодировку. Определяем кто набочил. Затем на нужном сервервере делем транзакцию пополам. Дебажим в середине и определяем текст сломан раньше или позже. И так пока не выявим где именно проблема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 12:26:27 |
|
||
|
Кириличные символы в веб приложении
|
|||
|---|---|---|---|
|
#18+
Blazkowicz[ Код: java 1. Т.е. у вас был текст в UTF-8 и вы его невалидно интерпретировали где-то как CP1251. Этой операцией вы пытаетесь восстановить данные делая преобразование в обратном порядке. Получить из String CP1251 и интерпретировать как UTF-8. Это костыль, при чем со своими побочными эффектами. Какие-то символы могут не восстановится в таком преобразовании. "Щ" что ли... не помню точно. Так если так поставить то уже в Linux будут проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 15:02:33 |
|
||
|
Кириличные символы в веб приложении
|
|||
|---|---|---|---|
|
#18+
denis11111Так если так поставить то уже в Linux будут проблемы. Во-первых. Я не говорю что это нужно делать. Это заплатка, причем, возможно, не работающая. Во-вторых, вы где-то лукавите. "РґРєРёР№" это UTF-8 текст, прочитаный как CP1251. Charset.defaultCharset() везде UTF-8. Тогда в вашем случае Код: java 1. это всё равно что Код: java 1. Что никак не может видоизменить текст. В случае "РґРєРёР№" текст можно "исправить" как раз кодом String unWrapAnswer = new String(unWrapAnswer.getBytes("CP1251"), "UTF-8"); Выходит Charset.defaultCharset() у вас где-то CP1251 и вы нас обманули. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 15:11:37 |
|
||
|
Кириличные символы в веб приложении
|
|||
|---|---|---|---|
|
#18+
BlazkowiczВ случае "РґРєРёР№" текст можно "исправить" как раз кодом String unWrapAnswer = new String(unWrapAnswer.getBytes("CP1251"), "UTF-8"); Выходит Charset.defaultCharset() у вас где-то CP1251 и вы нас обманули. Так, есть что-то новое: Charset.defaultCharset() - это я делал проверку в простой програме с методом main, там "UTF-8". Когда я закинул Charset.defaultCharset() в код веб приложения, то оказалось что там "windows-1251". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 15:42:14 |
|
||
|
Кириличные символы в веб приложении
|
|||
|---|---|---|---|
|
#18+
denis11111Charset.defaultCharset() - это я делал проверку в простой програме с методом main, там "UTF-8". Когда я закинул Charset.defaultCharset() в код веб приложения, то оказалось что там "windows-1251". Да, только windows-1251 это нативное имя для NIO. Кроссплатформеное для ваших нужд именно cp1251. Вот тут полный список http://docs.oracle.com/javase/7/docs/technotes/guides/intl/encoding.doc.html Иногда стоит по нему сверятся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 16:12:17 |
|
||
|
Кириличные символы в веб приложении
|
|||
|---|---|---|---|
|
#18+
А можно заменить это дело на "UTF-8", и как примерно это зделать? В файле glassfish-web.xml поставил <parameter-encoding default-charset="UTF-8" />, не помогло... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 16:37:58 |
|
||
|
Кириличные символы в веб приложении
|
|||
|---|---|---|---|
|
#18+
Это глобальное свойство JVM file.encoding. Вряд ли оно конфигуриуется на уровне отдельного модуля. -Dfile.encoding в параметрах запуска glassfish ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 16:41:54 |
|
||
|
Кириличные символы в веб приложении
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, О!, это помогло) Glassfish->server-config->JVM Settings->JVM Options , и сюда вписать параметр: "-Dfile.encoding=UTF8" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 17:10:26 |
|
||
|
|

start [/forum/topic.php?fid=59&tid=2130284]: |
0ms |
get settings: |
7ms |
get forum list: |
24ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
98ms |
get tp. blocked users: |
2ms |
| others: | 336ms |
| total: | 534ms |

| 0 / 0 |
