powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / кодировки((
18 сообщений из 18, страница 1 из 1
кодировки((
    #32631188
Lenta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите разобраться((

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

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

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

или я такие вопросы странные задаю...
или не так как-то задаю...
или "доктор..меня все игнорируют"...
...
Рейтинг: 0 / 0
кодировки((
    #32632037
Nikolay Kulikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Описывай более подробно.
Попробуй поставить в клиенте (Appserver) с которого идет коннект на DB2 в db2cli.ini поставить
DB2DISABLEUNICODE=1
...
Рейтинг: 0 / 0
кодировки((
    #32632041
Nikolay Kulikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя WebSphere???
...
Рейтинг: 0 / 0
кодировки((
    #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
кодировки((
    #32633646
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может переписать процедуру чтобы она работала на UTF-8? или страшно?
...
Рейтинг: 0 / 0
кодировки((
    #32633657
Lenta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ех...так она еще библиотеку вызывает dll...
её тоже переписывать?((
Нет...надо как-то эту строку считать.
Только вот как не читаю....всё одни вопросы...
А вообще такое ощущение, что строка 2 раза конвертируется.
"пїЅпїЅпїЅпїЅпїЅ" - это вот слово "закон" у меня...
если читать в UTF-8.
При этом такая вещь,конечно, только с русскими буквами.
Ковычки и проценты там всякие читаются верно.
...
Рейтинг: 0 / 0
кодировки((
    #32633704
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нарисуй проторип процедуры, какие параметры входят, какие возвращаются
...
Рейтинг: 0 / 0
кодировки((
    #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
кодировки((
    #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
кодировки((
    #32633783
Lenta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пробовала.....
ничего не изменилось.
...
Рейтинг: 0 / 0
кодировки((
    #32633864
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я имел в виду другое:
CREATE PROCEDURE GetSt(....) ...
...
Рейтинг: 0 / 0
кодировки((
    #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
кодировки((
    #32633887
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Завтра скажу результат...
...
Рейтинг: 0 / 0
кодировки((
    #32633896
Lenta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо)

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

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

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

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


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