
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
14.07.2010, 17:28
|
|||
|---|---|---|---|
|
|||
CLOB UTF8 -> WIN1251 |
|||
|
#18+
Есть CLOB в UTF8, необходимо сконвертировать в WIN1251. Стандартный Convert работает, но только со строками до 32к. Искал в форуме - в основном задача стоит WIN1251->UTF8 и вроде бы можно по частям, но в моем случае с исходным UTF8 не определить на какие части нужно делить строку. Может кто-то знает правильное решение данной проблемы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.07.2010, 20:31
|
|||
|---|---|---|---|
CLOB UTF8 -> WIN1251 |
|||
|
#18+
max13в моем случае с исходным UTF8 не определить на какие части нужно делить строку Неправда ваша. Методы пакета dbms_lob прекрасно определяют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.07.2010, 09:31
|
|||
|---|---|---|---|
|
|||
CLOB UTF8 -> WIN1251 |
|||
|
#18+
А можно поподробнее? Плохо представляю как dbms_lob'у можно сказать что у меня в CLOB сидит UTF8 при том, что NLS_CHARACTERSET = CL8MSWIN1251. Допустим вот так: DECLARE a CLOB; b CLOB; BEGIN a := 'Привет!'; b := CONVERT(a, 'CL8MSWIN1251', 'UTF8'); dbms_output.put_line(b); END; -------------------------------------- Привет! как разбить "a" на: a1='при' a2='вет!' ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.07.2010, 10:53
|
|||
|---|---|---|---|
|
|||
CLOB UTF8 -> WIN1251 |
|||
|
#18+
Насколько я знаю, утф-8 шифрует данные толи по 4, толи по 2 байта. делите длину строки кратно 4 и нет проблем :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.07.2010, 11:02
|
|||
|---|---|---|---|
|
|||
CLOB UTF8 -> WIN1251 |
|||
|
#18+
chameleon82Насколько я знаю, утф-8 шифрует данные толи по 4, толи по 2 байта. - UTF8 не шифрует данные - codepoint в UTF8 может быть представлен цепочкой байт длиной от 1 до 6. За подробностями - на unicode.org. 2TC: Установите на клиенте NLS_LANG=.CL8MSWIN1251, выгрузите CLOB в файл(ы), смените NLS_LANG на .UTF8 и загрузите обратно. Oracle Developer и прочие java-тулзы для операции не подойдут, нужно что-то с поддержкой монобайта - sql*plus, например. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.07.2010, 11:44
|
|||
|---|---|---|---|
CLOB UTF8 -> WIN1251 |
|||
|
#18+
max13как dbms_lob\'у можно сказать что у меня в CLOB сидит UTF8 при том, что NLS_CHARACTERSET = CL8MSWIN1251.10g Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.07.2010, 12:26
|
|||
|---|---|---|---|
|
|||
CLOB UTF8 -> WIN1251 |
|||
|
#18+
andrey_anonymous: вариант интересный, хотя с реализацией проблема :) Elic: действительно работает, 100к символов уже сконвертил! я пытался что-то подобное соорудить, но безрезультатно, не хватало ключевой строки: blob_csid =>NLS_CHARSET_ID ('UTF8') Спасибо всем! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.07.2010, 15:09
|
|||
|---|---|---|---|
CLOB UTF8 -> WIN1251 |
|||
|
#18+
max13у меня в CLOB сидит UTF8 при том, что NLS_CHARACTERSET = CL8MSWIN1251. Это другое дело. А как вы это получили? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.07.2010, 11:06
|
|||
|---|---|---|---|
|
|||
CLOB UTF8 -> WIN1251 |
|||
|
#18+
wildwindЭто другое дело. А как вы это получили? Да, извиняюсь, сразу не написал про настройку базы. Текст в UTF8 поступает от внешнего средства ("черного ящика") посредством COM-объектов и падает в CLOB. Кстати в нем XML и была даже мысль на уровне dbms_xmlparser как-то конвертировать, но что-то я ничего по теме в нем не нашел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.07.2010, 13:58
|
|||
|---|---|---|---|
|
|||
CLOB UTF8 -> WIN1251 |
|||
|
#18+
max13Текст в UTF8 поступает от внешнего средства ("черного ящика") посредством COM-объектов и падает в CLOB. Измените настройки - COM-объекты, посредством которых данные попадают в базу, должны заявить кодировку, соответствующую данным, т.е. UTF8. В этом случае перекодировка будет осуществляться автомагически. Текущая настройка - cl8mswin1251 - неверна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.07.2010, 14:44
|
|||
|---|---|---|---|
|
|||
CLOB UTF8 -> WIN1251 |
|||
|
#18+
andrey_anonymous Измените настройки - COM-объекты, посредством которых данные попадают в базу, должны заявить кодировку, соответствующую данным, т.е. UTF8. В этом случае перекодировка будет осуществляться автомагически. Текущая настройка - cl8mswin1251 - неверна. Конкретно данная задача составляет 0.1% от всей системы, и ради нее переводить всю базу на UTF8 неразумно. Не очень понял насчет "В этом случае перекодировка будет осуществляться автомагически.". Если все будет в UTF8, то и перекодировка никакая не нужна ведь? или я чего-то не понял... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.07.2010, 14:46
|
|||
|---|---|---|---|
|
|||
CLOB UTF8 -> WIN1251 |
|||
|
#18+
max13или я чего-то не понял... Именно. Globalization Support Guide в помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.07.2010, 14:50
|
|||
|---|---|---|---|
CLOB UTF8 -> WIN1251 |
|||
|
#18+
max13, Клиент, будь то COM или SQL+, не должен обманывать сервер о кодировке данных которые он запихивает в базу. Если твой COM сообщит о том что он собирается пихать UTF8 то при пересылке данных в базу которая в MSWIN1251 произойдет конвертация в кодировку базы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.07.2010, 15:51
|
|||
|---|---|---|---|
|
|||
CLOB UTF8 -> WIN1251 |
|||
|
#18+
Proteusmax13, Клиент, будь то COM или SQL+, не должен обманывать сервер о кодировке данных которые он запихивает в базу. Если твой COM сообщит о том что он собирается пихать UTF8 то при пересылке данных в базу которая в MSWIN1251 произойдет конвертация в кодировку базы. Кажется начинаю понимаю о чем речь. Но в моем случае никакой клиент не пытается что-то вставить в базу Oracle. Наоборот - есть COM, который представляет собой черный ящик и умеет возвращать строку UTF8 (как он это делает, откуда берет данные я даже не представляю, знаю только как запустить). В результате после манипуляций с этим самым COM в pl/sql процедуре возникает строка UTF8, которую нужно конвертнуть, чтобы можно было обработать в базе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.07.2010, 16:00
|
|||
|---|---|---|---|
CLOB UTF8 -> WIN1251 |
|||
|
#18+
не знаю как там COM не работал с ними. Но можно предположить что если строка появляется сама по себе то COM сам устанавливает соединение с базой. можно попробовать сменить значение NLS_LANG в реестре на *******_******.UTF8 того хоста на котором поднимается COM и посмотреть на результат, будет ли продолжать приходить UTF8 или в базе появится другая кодировка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.07.2010, 16:35
|
|||
|---|---|---|---|
|
|||
CLOB UTF8 -> WIN1251 |
|||
|
#18+
Proteusне знаю как там COM не работал с ними. Но можно предположить что если строка появляется сама по себе то COM сам устанавливает соединение с базой. можно попробовать сменить значение NLS_LANG в реестре на *******_******.UTF8 того хоста на котором поднимается COM и посмотреть на результат, будет ли продолжать приходить UTF8 или в базе появится другая кодировка. да, COM скорее всего сам устанавливает соединение с базой, но только не с моей, оракловой, а с внешней (которая находится вообще где-то в европе), что-то читает оттуда и как результат выдает мне строку. В описании COM-объекта, которым я располагаю написано, что функция возвращает строку в UTF8. Судя по экспериментам так оно и есть. Вообще COM-функцию я запускаю через JavaScript на клиенте (ORDCOM не удалось побороть, что-то с ним не так), затем через Ajax->Apache->Application Server процедура pl/sql на сервере, у которой в качестве параметра та самая строка. Я пытался в HTTP заголовке аякса указать UTF8, но то ли не то писал, то ли действительно не срабатывает и не понятно должно ли. Где-то вот тут: ... httpRequest.open( "POST", url, true ); httpRequest.setRequestHeader(''Content-Type'', ''"text/xml"''); ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.07.2010, 16:49
|
|||
|---|---|---|---|
CLOB UTF8 -> WIN1251 |
|||
|
#18+
Следовательно в твою то базу кто закидывает строку? Твое приложение? Тогда оно должно озаботится тем чтобы открытая сессия к базе данных получила ту кодировку в которой передает данные. Раз у тебя UTF8 так и укажи что у тебя UTF8. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.07.2010, 16:56
|
|||
|---|---|---|---|
|
|||
CLOB UTF8 -> WIN1251 |
|||
|
#18+
Proteus Код: plaintext Ну-ну Вернее, мысль-то правильная, на application server об этом надо позаботиться. Но предложение... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.07.2010, 17:06
|
|||
|---|---|---|---|
CLOB UTF8 -> WIN1251 |
|||
|
#18+
andrey_anonymous, Ну, я не владею, серверами приложений и от косяков не застрахован. Где там нужно прикрутить кодировку не знаю, но для того чтобы пропихнуть данные в нужной кодировке через SQL+ поступал именно так. Так что не обессудьте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.07.2010, 17:21
|
|||
|---|---|---|---|
|
|||
CLOB UTF8 -> WIN1251 |
|||
|
#18+
Proteusдля того чтобы пропихнуть данные в нужной кодировке через SQL+ поступал именно так. Так что не обессудьте. Поступать Вы вольны как угодно, но... Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.07.2010, 17:29
|
|||
|---|---|---|---|
CLOB UTF8 -> WIN1251 |
|||
|
#18+
Max13через Ajax->Apache->Application Server процедура pl/sql на сервере, у которой в качестве параметра та самая строка А все остальные данные (в смысле human-readable) у вас в 1251? Если так, конвертите средствами Явы перед вызовом процедуры, и не парьте себе и людям мозги. Кстати, лезть на сервера в Европе с клиента тоже бред еще тот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.07.2010, 17:48
|
|||
|---|---|---|---|
|
|||
CLOB UTF8 -> WIN1251 |
|||
|
#18+
alter session уже смотрел - понял что нет такого там. SQL+ больно сложно еще привязывать сюда. Application Server - вариант, но где и как не пойму. Если на клиенте, то что-то не помогает: httpRequest.setRequestHeader("Content-Type", "text/xml;charset=UTF-8"); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.07.2010, 17:59
|
|||
|---|---|---|---|
|
|||
CLOB UTF8 -> WIN1251 |
|||
|
#18+
wildwindMax13через Ajax->Apache->Application Server процедура pl/sql на сервере, у которой в качестве параметра та самая строка А все остальные данные (в смысле human-readable) у вас в 1251? Если так, конвертите средствами Явы перед вызовом процедуры, и не парьте себе и людям мозги. А яваскриптом то разве можно что-то скорвертить? Я ничего в инете на эту тему не нашел. Конверт я уже и на pl/sql сделал благодаря Elic. Все работает. Сейчас просто спортивный интерес уже заставить все работать без всяких конвертаций. А мозг я никому не парю... wildwind[quot Max13]Кстати, лезть на сервера в Европе с клиента тоже бред еще тот. Когда другого варианта нет - ничего не поделаешь. Я же говорю - ORDCOM отказывается работать. Писать приложение на каком-нить С++ на сервере и потом с базой обмениваться через файлы итд итп еще хуже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.07.2010, 19:57
|
|||
|---|---|---|---|
CLOB UTF8 -> WIN1251 |
|||
|
#18+
andrey_anonymousProteusдля того чтобы пропихнуть данные в нужной кодировке через SQL+ поступал именно так. Так что не обессудьте. Поступать Вы вольны как угодно, но... Код: plaintext 1. 2. 3. 4. да, да это я дурку прогнал. все было почти так но по другому :) Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.07.2010, 00:36
|
|||
|---|---|---|---|
CLOB UTF8 -> WIN1251 |
|||
|
#18+
max13А яваскриптом то разве можно что-то скорвертить? А я где-то писал про яваскрипт? App. server на чем у вас? wildwindMax13Кстати, лезть на сервера в Европе с клиента тоже бред еще тот. Когда другого варианта нет - ничего не поделаешь. Я сильно сомневаюсь, что вы рассмотрели другие варианты, не то что попробовали. Протокол обмена с Европой - секретный? Наверняка обычный веб-сервис. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=52&mobile=1&tid=1884648]: |
0ms |
get settings: |
5ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
142ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
75ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 461ms |

| 0 / 0 |
