проблема UTF8 IMS(9.2) -> SDE(9.2) -> Oracle(10g)

0 голосов
спросил 26 Июнь, 08 от Radek (340 баллов) в категории Программные продукты Esri
Здравствуйте,
 
нужна помощь с UTF8, обнаружил что когда в arcxml запросе есть знаки, не входящие в ISO-8895-1, тогда в базу данных попадет такой запрос искаженным, данный стринг в SQL превращается в кучу мусора, точно будто программа ожидает 8859-1, но получает UTF8 ... 
... вопрос зачем ожидает 88591, когда везде и все настроено под utf8 (база данных utf8, все locales utf8, web server utf8 ...) 
 
запрос:
<?xml version="1.0" encoding="UTF-8" ?>
<ARCXML version="1.1">
<REQUEST>
<GET_FEATURES outputmode="xml" geometry="false" envelope="false" >
<LAYER id="0" />
<SPATIALQUERY subfields="#ALL#" where="(NDSDE.W03_ND_HRCR.NAZEV='Урал')" />
</GET_FEATURES>
</REQUEST>
</ARCXML>
 
ответ:
<?xml version="1.0" encoding="UTF-8"?><ARCXML version="1.1"><RESPONSE><FEATURES><FEATURECOUNT count="0" hasmore="false" /></FEATURES></RESPONSE></ARCXML>
 
причем в лог-файле ArcIMS стринг "Урал" еще в порядке, похоже виновато ArcSDE, пробовал также direct connection, но ничего не изменилось
 
мы полностью перешли на utf, кажется зря :)) но вернутся обратно к iso не хочется, так как все мимо esri работает с utf8 без проблем
 
интересная вещь, когда arcxml response содержит utf8, тогда тот в полном порядке получаем
 
запрос:
<?xml version="1.0" encoding="UTF-8" ?>
<ARCXML version="1.1">
<REQUEST>
<GET_FEATURES outputmode="xml" geometry="false" envelope="false" >
<LAYER id="0" />
<SPATIALQUERY subfields="#ALL#" where="(NDSDE.W03_ND_HRCR.NAZEV like '% %')" />
</GET_FEATURES>
</REQUEST>
</ARCXML>
 
ответ:
<?xml version="1.0" encoding="UTF-8"?><ARCXML version="1.1"><RESPONSE><FEATURES><FEATURE><FIELDS NDSDE.W03_ND_HRCR.ID="0" NDSDE.W03_ND_HRCR.OBJECTID="1" NDSDE.W03_ND_HRCR.NAZEV="Урал" NDSDE.W03_ND_HRCR.ET_ID="0" #SHAPE#="[Geometry]" NDSDE.W03_ND_HRCR.OBJECTID_1="1" SHAPE.AREA="0" SHAPE.LEN="1979877,515794" /></FEATURE><FEATURECOUNT count="1" hasmore="false" /></FEATURES></RESPONSE></ARCXML>
 
 
пробовал даже в tomcat установить филтер, котороый все входящие стринги берет как utf8, филтер работает, но это не помогло ... вместе с логфайлом АrcIMS это сводит к мнению, что виноват ArcSDE
 

10 Ответы

0 голосов
ответил 26 Июнь, 08 от PITKS1 (20,860 баллов)
SDE verbose log включить надо. Тогда все видно будет
0 голосов
ответил 26 Июнь, 08 от Radek (340 баллов)

включил ... в логе ArcSDE видно, что из двухбайтовых UTF знаков стало вдвое больше "деформированных" знаков, однобайтовые знаки остались нетронуты

интересно то, что эти знаки соответствуют байтовому переводу UTF8 -> ISO-8859-2, а не ISO-8859-1, которых ожидал увидеть 
 
очевидно это не случай, именно под ISO-8859-2 у нас был webserver и база данных раньше, и не исключено, что такие locales были на сервере еще во время установки новой (9.2) версии ArcSDE
 
но незнаю что/кто заставляет ArcSDE думать об ISO-8859-2, тогда как sdemon -o info -I vars сообщает о том, что LC_ALL, NLS_LANG и LANG, все utf8 ...
...   ArcIMS - app_srvr.log, Java Virtual Machine's encoding UTF-8, 
в логе ArcIMS все стринги хорошо читаются, все там в UTF8
 
   
0 голосов
ответил 26 Июнь, 08 от PITKS1 (20,860 баллов)
База Оракл ??? или MS SQL ??
0 голосов
ответил 26 Июнь, 08 от Radek (340 баллов)

б.д. Oracle 10g (10.2.3), кодировка AL32UTF8,  ... ArcSDE 9.2 sp4, ArcIMS 9.2 sp5, все на linux(centos)

0 голосов
ответил 27 Июнь, 08 от PITKS1 (20,860 баллов)
Так UTF8 или AL32UTF8 ??? Для Оракла это разные кодировки. Разница небольшая, но я не помню где именно русские буквы хранятся.
0 голосов
ответил 27 Июнь, 08 от Radek (340 баллов)
в Oracle NLS_CHARSET = AL32UTF8, стринги хранятся в NVARCHAR2
 
 sdemon дал следующую информацию:
 LC_ALL=cs_CZ.utf8
 NLS_LANG=CZECH_AMERICA.AL32UTF8
 LANG = cs_CZ.utf8
 
 locale на linux  cs_CZ.utf8
 
 причем как уже сказал,  читать стринги посредничеством SDE и IMS можно, все буквы, русские и среднеевропейские изовбражены правильно
 
 наоборот SQL вопрос со стрингами utf8 не проходит, в логе ArcIMS еще все в порядке, но в логе ArcSDE эти стринги уже "плохи"  
0 голосов
ответил 27 Июнь, 08 от Radek (340 баллов)

еще интересный момент - select by attributes на тотже layer в ArcMap, содержающий кирилицу или другие знаки, работает отлично, так что путь ArcMap->ArcSDE-Oracle ок, но ArcIMS-ArcSDE-Oracle не работает

также есть некий буг, но мне с моим логином эта страница недоступна ...
 
0 голосов
ответил 27 Июнь, 08 от PITKS1 (20,860 баллов)
Add support for Unicode communication with ArcSDE data source.
Defect ID CQ00290099
Status assigned
Submitted Apr 27 2006
Last Modified Feb 7 2007
Severity Low
Priority 2
Planned Fix 9.3Final
Software ArcIMS
Version Found 9.2
Project Spatial Server
Client Platform ALL
Description This is an offshoot of CQ00287214, which addresses phase 1 of this Unicode project to handle Unicode communication with shapefile data source.

In the phase 2 of this project, spatial server should be updated to handle Unicode communication with ArcSDE data source.
0 голосов
ответил 27 Июнь, 08 от Radek (340 баллов)

PITKS, спасибо, будем ждать 9.3, сказали будет дней через 14

здесь обещают unicode для сп. серв.  http://www.esri.com/software/arcgis/arcims/about/whats-coming.html

0 голосов
ответил 28 Июнь, 08 от PITKS1 (20,860 баллов)
Мы вчера уже получили 9.3 весь набор.
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...