
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
12.02.2018, 23:43
|
|||
|---|---|---|---|
OCI (extproc) и кодировка |
|||
|
#18+
Добрый день. Вопрос, конечно, по с++, но на том форуме наверное спрашивать не стоит. Пожалуйста, помогите извлечь и раскодировать строку из передаваемого в DLL массива строк. База на виндавсах, DLL пишу в visual studio 2008. При конфигурации windows / 12.2EE64 / CL8MSWIN1251 - проблем нет (VS проект в ascii), а при переходе на AL32UTF8 - нераспознаваемые строки в коллекциях (VS проект в юникоде). Проблема возникает с параметром типа OCIColl*, когда это [table of varchar2]. Передаваемые одиночные параметры-строки расковыриваются нормально (через CA2W/MultiByteToWideChar), а вот извлеченный из коллекции элемент никак не поддается. Вернее, английские символы распаковываются, а русские - нет (все - код 65533). Помогите советом или кусочком кода :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
14.02.2018, 16:51
|
|||
|---|---|---|---|
OCI (extproc) и кодировка |
|||
|
#18+
Напишу подробнее, как делал. Передаваемый объект на стороне БД: Код: plsql 1. Оформление вызова на стороне БД: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. Вызов на стороне БД: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. В Visual Studio проект в юникоде, 64 бит. Код DLL: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. Всяческие Код: plaintext 1. 2. никак не влияют. Если БД в кодировке CL8MSWIN1251 - всё работает. Не работает при AL32UTF8. Игры со всякими NVARCHAR2 ничего не дали. Может кто сталкивался с передачей объектов через extproc, помогите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.02.2018, 14:49
|
|||
|---|---|---|---|
OCI (extproc) и кодировка |
|||
|
#18+
Попробовал передавать через другой тип - OCIArray: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. - всё аналогично. Пробовал выбирать элементы через итератор (вместо OCICollGetElem): Код: plaintext 1. 2. 3. 4. - ничего не меняется, любой национальный символ меняется на CHR(191). Т.е. проблема где-то в глубине коллекции. Может, нужно как-то конфигурировать OCI для юникода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.02.2018, 15:24
|
|||
|---|---|---|---|
OCI (extproc) и кодировка |
|||
|
#18+
Спасибо! Близко, но ситуация наоборот. ENVS в настройках extproc сейчас посмотрю. Ещё попробовал прямое копирование: Код: plaintext 1. и на стороне БД (уже в хранимке) увидел что в получаемом массиве аналогичная ситуация - CHR(191). А может быть причина в версии ОС - Windows 10 Home, один язык ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=52&mobile=1&tid=1884403]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
33ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
23ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 312ms |

| 0 / 0 |
