Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Новый топик    Ответить
 Проблема с кирилицей при работе Message Broker с Oralce  [new]
Vincent Vega
Member

Откуда: Киев
Сообщений: 117
Дано:
Message Broker 6.1.0.5 (AIX)
Oracle 10.2.0.4.0 (AIX)
Вызываем по ODBC процедуру.

Процедура в Oracle:
Procedure Vs_Proc_Test_1(
    pID      IN NUMBER ,
    pMESSAGE IN VARCHAR2 ,
    pSTATUS OUT NUMBER ,
    pRES OUT VARCHAR2 )
AS
BEGIN
  INSERT INTO VS_TEST_1
    (ID, MESSAGE
    ) VALUES
    (pID, pMESSAGE
    );
    Pstatus :=1;
    pRes:='!русский!';
END VS_PROC_TEST_1;

Вызов процедуры в брокере:
-- тестовая процедура для проверки работы с базой данных
CREATE PROCEDURE TESTDATA(
IN pmsg_id INTEGER,
IN perrortext CHARACTER,
OUT status INTEGER,
OUT result CHARACTER
)
LANGUAGE DATABASE EXTERNAL NAME "websphere.Vs_Proc_Test_1";
-- нода Database - вызов тестовой процедуры для инсерта данных и получения ответных данных
CREATE DATABASE MODULE Main_Database
	CREATE FUNCTION Main() RETURNS BOOLEAN
	BEGIN
		DECLARE status INTEGER;
		DECLARE result CHARACTER;
		--CALL TESTDATA(2, 'test message', status, result);
		CALL TESTDATA(3, 'русский текст', status, result);
		SET Environment.Variables.Data.Status = status;
		SET Environment.Variables.Data.Result = result;
		RETURN TRUE;
	END;

END MODULE;

В таблице оракл русский текст инсертится нормально. А вот исходящий параметр передается в совершенно непонятной кодировке.
Пример сохраненного сообщения:

 <DATA>
  <PMSG_ID>5171263</PMSG_ID> 
  <Status>1</Status> 
  <Result>!!</Result> 
  </DATA>

CAST проблему не решает.
В чем может быть глюк?
18 фев 10, 13:22    [8363765]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с кирилицей при работе Message Broker с Oralce  [new]
BRK01
Member

Откуда: Мск
Сообщений: 84
Доброго времени суток, Vincent Vega

В какой кодировке база данных?
Плюс, если сообщение результирующее уходит по MQ или HTTP/SOAP, смотрите на протокольные заголовки.

Плюс, если под дебагом русский виден, то касяк в протоколах.
18 фев 10, 17:11    [8365912]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с кирилицей при работе Message Broker с Oralce  [new]
Vincent Vega
Member

Откуда: Киев
Сообщений: 117
BRK01,

Кодировки базы следующие:
1 	NLS_NCHAR_CHARACTERSET 	UTF8                        
2 	NLS_LANGUAGE           	AMERICAN                    
3 	NLS_TERRITORY          	AMERICA                     
4 	NLS_CURRENCY           	$                           
5 	NLS_ISO_CURRENCY       	AMERICA                     
6 	NLS_NUMERIC_CHARACTERS 	.,                          
7 	NLS_CHARACTERSET       	CL8MSWIN1251  

Ответное сообщение уходит в очередь + я сохраняю его в файл.
Под дебагером тоже квадратики отображаются.
Есть подозрение что из-за того что база в кодировке win1251, а ODBC драйвер работает с ней под UTF-8... Но это на уровне догадок. Если это так то как в ODBC64.ini настроить кодировку в которой работает драйвер
18 фев 10, 17:55    [8366326]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с кирилицей при работе Message Broker с Oralce  [new]
Vincent Vega
Member

Откуда: Киев
Сообщений: 117
Эксперементами с файлом odbc64.ini удалось получить следующее. К настройкам подключения к оракл добавил:

IANAAppCodePage=2251

После этого процедура стала возвращать "рстуф" вместо ожидаемых "абвгд" (смотрю в дебагере), это уже лучше чем просто квадратики, но все же не правильно.

Какие еще будут идеи?
19 фев 10, 11:32    [8369581]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с кирилицей при работе Message Broker с Oralce  [new]
Vincent Vega
Member

Откуда: Киев
Сообщений: 117
Методом научного тыка решение нашлось следующее:

IANAAppCodePage=8

это кодировка ISO-8859-5. Теперь кириллица работает так как надо!
19 фев 10, 12:05    [8369922]     Ответить | Цитировать Сообщить модератору
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Ответить