Гость
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / кодировки(( / 18 сообщений из 18, страница 1 из 1
02.08.2004, 12:27
    #32631188
Lenta
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кодировки((
Помогите разобраться((

База в кодировке UTF8...есть в ней хранимая продура, преобразующая строку..внешняя на С..
Есть приложение, её вызывающее (вызывает JavaBean, который параметры получает от JSP в 1251).
В результате по логам хранимой процедуры вижу, что проблема в кодировке.
Вот таким страшным видом "банк" кодирует она мне слово "банк"...

Использую
java.util.Properties prop = new java.util.Properties();
устанавливаю кодировку:
prop.put("charSet", "1251");

Результат тот же(...
Неужели писать перекодировщик?((....
...
Рейтинг: 0 / 0
02.08.2004, 17:44
    #32631967
Lenta
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кодировки((
Мда...

или я такие вопросы странные задаю...
или не так как-то задаю...
или "доктор..меня все игнорируют"...
...
Рейтинг: 0 / 0
02.08.2004, 18:15
    #32632037
Nikolay Kulikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кодировки((
Описывай более подробно.
Попробуй поставить в клиенте (Appserver) с которого идет коннект на DB2 в db2cli.ini поставить
DB2DISABLEUNICODE=1
...
Рейтинг: 0 / 0
02.08.2004, 18:18
    #32632041
Nikolay Kulikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кодировки((
У тебя WebSphere???
...
Рейтинг: 0 / 0
03.08.2004, 12:34
    #32632992
Lenta
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кодировки((
Ок. Подробнее.

DB2 v.8.1.5. :
база в кодировке UTF-8.
В ней есть процедура на Си, получающая входным параметром строку и её конвертирующая.
Работает процедура в кодировке Сp1251(процедура вызывает Dll с параметрами в этой кодировке)

далее WebSphere Server v.5.1.:
на котором работает приложение-клиент этой базы данных
Приложение стандартное в терминах MVC.
Вся работа с базой в JavaBeans, которые получают из формы JSP строку в 1251 и засылают её хранимой процедуре, от которой получают изменённую строку.

Отсюда. Т.к. база в UTF-8, потоки(пересылка строк) идёт с конвертацией в UTF-8.
Пробовала:
java.util.Properties prop = new java.util.Properties();
prop.put("charSet", "Сp1251");

Потоки всё равно в UTF-8.

Пол беды. В хранимой процедуре вставила перекодировщик.
Полученную строку перевожу в 1251. После чего делаю со строкой то,что мне нужно и возвращаю её, оставляя в 1251.

НО приходит она в форме вопросов ???.

Т.о. осталось её прочитать. Пробовала:
str =new String (res_set.getString(3).getBytes("UTF-8"),"Cp1251");
И наоборот
str =new String (res_set.getString(3).getBytes("Cp1251"),"UTF-8");

Не помогло.

Запуталась окончательно.

Итак схема (сокращённо):

хранимая процедура(1251)<->JavaBeans(1251)
НО поток данных от процедуры не раскодируется:
ни getBytes("UTF-8")
ни getBytes("Cp1251")
ни getBytes("Unicode")

Что делать?(
...
Рейтинг: 0 / 0
03.08.2004, 15:45
    #32633646
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кодировки((
Может переписать процедуру чтобы она работала на UTF-8? или страшно?
...
Рейтинг: 0 / 0
03.08.2004, 15:49
    #32633657
Lenta
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кодировки((
ех...так она еще библиотеку вызывает dll...
её тоже переписывать?((
Нет...надо как-то эту строку считать.
Только вот как не читаю....всё одни вопросы...
А вообще такое ощущение, что строка 2 раза конвертируется.
"пїЅпїЅпїЅпїЅпїЅ" - это вот слово "закон" у меня...
если читать в UTF-8.
При этом такая вещь,конечно, только с русскими буквами.
Ковычки и проценты там всякие читаются верно.
...
Рейтинг: 0 / 0
03.08.2004, 16:05
    #32633704
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кодировки((
нарисуй проторип процедуры, какие параметры входят, какие возвращаются
...
Рейтинг: 0 / 0
03.08.2004, 16:08
    #32633715
Lenta
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кодировки((
SQL_API_RC SQL_API_FN GetSt(sqlint32 *usl,char inWord[1000], char outWord[1000], sqlint32 *num)
{
struct sqlca sqlca;

EXEC SQL BEGIN DECLARE SECTION;
char sRequest[1000];
long uslov;
EXEC SQL END DECLARE SECTION;
uslov=*usl;

*num = MakeRequest(uslov, inWord, sRequest);//эта функция работает с dll
strcpy(outWord, sRequest);
return 0;
}
...
Рейтинг: 0 / 0
03.08.2004, 16:18
    #32633748
Nikolay Kulikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кодировки((
Ты 2DISABLEUNICODE=1 в db2cli.ini пробовала???
http://publib.boulder.ibm.com/infocenter/db2v8luw/index.jsp?topic=/com.ibm.db2.udb.doc/ad/r0008792.htm
...
Рейтинг: 0 / 0
03.08.2004, 16:31
    #32633783
Lenta
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кодировки((
пробовала.....
ничего не изменилось.
...
Рейтинг: 0 / 0
03.08.2004, 17:05
    #32633864
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кодировки((
Я имел в виду другое:
CREATE PROCEDURE GetSt(....) ...
...
Рейтинг: 0 / 0
03.08.2004, 17:07
    #32633871
Lenta
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кодировки((
CREATE PROCEDURE GetSt (IN Usl INTEGER, IN Word VARCHAR(1000), OUT language VARCHAR(1000), OUT num INTEGER) DYNAMIC RESULT SETS 0 LANGUAGE C PARAMETER STYLE SQL NO DBINFO FENCED NOT THREADSAFE MODIFIES SQL DATA PROGRAM TYPE SUB EXTERNAL NAME 'rcMorph!GetSt'
...
Рейтинг: 0 / 0
03.08.2004, 17:14
    #32633887
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кодировки((
Завтра скажу результат...
...
Рейтинг: 0 / 0
03.08.2004, 17:16
    #32633896
Lenta
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кодировки((
спасибо)

ех...не успею я до отпуска...
...
Рейтинг: 0 / 0
04.08.2004, 10:42
    #32634484
Okram
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кодировки((
А что именно должна делать твоя GetSt ?
...
Рейтинг: 0 / 0
04.08.2004, 10:54
    #32634519
Lenta
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кодировки((
проблема решилась....

побайтный вывод окончательно убедил в том, что на выходе хранимой процедуры был странный мусор, в котором все аски символы стояли на своём месте(т.е. даже позиции верные)...а вот русские буквы терялись безвозвратно.

Т.о. память под строку выделялась неверно....
Исправив это, всё заработало стандартным .getString(int param)...даже бещ перекодировки.

На будущее. Т.к. сие проявилось только в кодировке UTF-8, тестируйте и на ней тоже, дабы верно везде работало....
...
Рейтинг: 0 / 0
04.08.2004, 10:55
    #32634522
Lenta
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
кодировки((
спасибо всем большое)
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / кодировки(( / 18 сообщений из 18, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]