|
кодировки((
|
|||
---|---|---|---|
#18+
Помогите разобраться(( База в кодировке UTF8...есть в ней хранимая продура, преобразующая строку..внешняя на С.. Есть приложение, её вызывающее (вызывает JavaBean, который параметры получает от JSP в 1251). В результате по логам хранимой процедуры вижу, что проблема в кодировке. Вот таким страшным видом "банк" кодирует она мне слово "банк"... Использую java.util.Properties prop = new java.util.Properties(); устанавливаю кодировку: prop.put("charSet", "1251"); Результат тот же(... Неужели писать перекодировщик?((.... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2004, 12:27 |
|
кодировки((
|
|||
---|---|---|---|
#18+
Мда... или я такие вопросы странные задаю... или не так как-то задаю... или "доктор..меня все игнорируют"... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2004, 17:44 |
|
кодировки((
|
|||
---|---|---|---|
#18+
Описывай более подробно. Попробуй поставить в клиенте (Appserver) с которого идет коннект на DB2 в db2cli.ini поставить DB2DISABLEUNICODE=1 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2004, 18:15 |
|
кодировки((
|
|||
---|---|---|---|
#18+
Ок. Подробнее. 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") Что делать?( ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2004, 12:34 |
|
кодировки((
|
|||
---|---|---|---|
#18+
Может переписать процедуру чтобы она работала на UTF-8? или страшно? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2004, 15:45 |
|
кодировки((
|
|||
---|---|---|---|
#18+
ех...так она еще библиотеку вызывает dll... её тоже переписывать?(( Нет...надо как-то эту строку считать. Только вот как не читаю....всё одни вопросы... А вообще такое ощущение, что строка 2 раза конвертируется. "пїЅпїЅпїЅпїЅпїЅ" - это вот слово "закон" у меня... если читать в UTF-8. При этом такая вещь,конечно, только с русскими буквами. Ковычки и проценты там всякие читаются верно. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2004, 15:49 |
|
кодировки((
|
|||
---|---|---|---|
#18+
нарисуй проторип процедуры, какие параметры входят, какие возвращаются ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2004, 16:05 |
|
кодировки((
|
|||
---|---|---|---|
#18+
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; } ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2004, 16:08 |
|
кодировки((
|
|||
---|---|---|---|
#18+
Ты 2DISABLEUNICODE=1 в db2cli.ini пробовала??? http://publib.boulder.ibm.com/infocenter/db2v8luw/index.jsp?topic=/com.ibm.db2.udb.doc/ad/r0008792.htm ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2004, 16:18 |
|
кодировки((
|
|||
---|---|---|---|
#18+
пробовала..... ничего не изменилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2004, 16:31 |
|
кодировки((
|
|||
---|---|---|---|
#18+
Я имел в виду другое: CREATE PROCEDURE GetSt(....) ... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2004, 17:05 |
|
кодировки((
|
|||
---|---|---|---|
#18+
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' ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2004, 17:07 |
|
кодировки((
|
|||
---|---|---|---|
#18+
Завтра скажу результат... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2004, 17:14 |
|
кодировки((
|
|||
---|---|---|---|
#18+
спасибо) ех...не успею я до отпуска... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2004, 17:16 |
|
кодировки((
|
|||
---|---|---|---|
#18+
А что именно должна делать твоя GetSt ? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 10:42 |
|
кодировки((
|
|||
---|---|---|---|
#18+
проблема решилась.... побайтный вывод окончательно убедил в том, что на выходе хранимой процедуры был странный мусор, в котором все аски символы стояли на своём месте(т.е. даже позиции верные)...а вот русские буквы терялись безвозвратно. Т.о. память под строку выделялась неверно.... Исправив это, всё заработало стандартным .getString(int param)...даже бещ перекодировки. На будущее. Т.к. сие проявилось только в кодировке UTF-8, тестируйте и на ней тоже, дабы верно везде работало.... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2004, 10:54 |
|
|
start [/forum/topic.php?fid=43&msg=32633871&tid=1606171]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
158ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 272ms |
0 / 0 |