Почему OCONV() с кодом MCT изменяет исходную строку?

У меня есть строка с некоторыми испанскими символами, и когда я использую функцию OCONV() U2 с кодом 'MCT', она меняет испанский символ на что-то другое. Кто-нибудь знает?

STRING: T r L=16 `CITáN, MOR 32000'

TEST.MCT:   5: STR2 = OCONV(STR,'MCT')
:: S
TEST.MCT:   6: CRT STR2
:: S
Cit?9: Mor 32000

person user1387287    schedule 19.03.2014    source источник
comment
Какую версию U2 вы используете? ЮниДата или Юниверс? Основываясь на приведенном вами примере, MCT выполняет битовую математику для создания символа нижнего регистра. С символом выше ASCII 128 это будет неправильно переведено. Убедитесь, что ваша база данных настроена на прием Unicode, но это может быть ошибка в MCT с символами выше ASCI 128.   -  person International Spectrum    schedule 19.03.2014


Ответы (2)


Обратите внимание, что я создал следующую программу и не вижу проблемы.

CT BP SO

 SO
 0001 STR = "CIT":CHAR(225):"N, MOR 3200"
 0002 STR2 = OCONV(STR, "MCT")
 0003 PRINT STR
 0004 PRINT STR2
 0005 PRINT SEQ(STR2[4,1])

Когда я компилирую и запускаю его, я получаю следующее:

 CITáN, MOR 3200
 Citán, Mor 3200
 225
 >

Обратите внимание, что я тестировал UniVerse11.2.2 в Windows. Можете ли вы попробовать пример кода, который я предоставил из учетной записи HS.SALES, и сообщить мне, что он делает?

Если проблема не устранена, сообщите нам полную версию UniVerse и ОС, на которой вы ее используете.

добавленная информация: примечание проверено на UniVerse 11.1.1 в AIX 6.1, и у меня это сработало. Если у вас по-прежнему возникают проблемы, я предлагаю вам связаться с поставщиком услуг по обслуживанию UniVerse.

person Mike    schedule 27.03.2014
comment
Мы используем Universe V11.1 на Unix AIX ver 6.1 Спасибо. Я прошел через отладчик и сделал следующее: - person user1387287; 27.03.2014
comment
Мы используем Universe V11.1 на Unix AIX ver 6.1 Спасибо. Я прошел через отладчик и сделал следующее: RAID BP TEST.CH TEST.CH: 1: STR = CIT:CHAR(225):N, MOR 3200 :: S TEST.CH: 2: STR2 = OCONV(STR, MCT ) :: STR/ STRING: T r L=16 CITáN, MOR 3200' :: S TEST.CH: 3: CRT STR :: STR2/ STRING: T r L=16 CitÃ6n, Mor 3200' :: S CITáN, MOR 3200 TEST.CH: 4: CRT STR2 :: S Cit?n, Mor 3200 - person user1387287; 27.03.2014
comment
TEST.CH: 2: STR2 = OCONV(STR, MCT) :: STR/STRING: T r L=16 CITáN, MOR 3200' :: S TEST.CH: 3: CRT STR :: STR2/ STRING: T r L=16 CitÃ3n, Mor 3200' :: S CITáN, MOR 3200 TEST.CH: 4: CRT STR2 :: S Cit? п, мор 3200 - person user1387287; 27.03.2014
comment
Я попробовал это на поле включения NLS и получил следующее: 0001: CIT?N, MOR 3200, Cit?n, Mor 3200 Внизу строки 1. ----: ^ Режим отображения со стрелкой вверх = включено ПРЕДУПРЕЖДЕНИЕ: Строка имеет недопустимые внутренние символы и могут отображаться неправильно. 0001: CIT^225N, MOR 3200, Cit^!!!!n, Mor 3200 Внизу строки 1. ----: - person user1387287; 27.03.2014
comment
Тяжело читать ваши результаты. Можете ли вы запустить его вне отладчика и отобразить результаты (пожалуйста, установите в виде блока кода для облегчения чтения сообщения в stackoverflow). Кроме того, что установлено в LANG? - person Mike; 11.04.2014

Ваш вывод трудно прочитать, так как он объединяет строки.

Мой прогон через RAID показывает правильную информацию.

RAID BP SO
 SO:   1:  STR = "CIT":CHAR(225):"N, MOR 3200"
:: S
 SO:   2: STR2 = OCONV(STR, "MCT")
:: S
 SO:   3: PRINT STR
:: S
CITáN, MOR 3200
SO:   4: PRINT STR2
:: S
Citán, Mor 3200
 SO:   5: PRINT SEQ(STR2[4,1])
:: S
225

Тем не менее, у меня есть LANG=en_US в переменных среды UNIX.

Таким образом, может возникнуть проблема с вашей средой в зависимости от того, какой язык установлен, я предлагаю вам связаться с поставщиком услуг по обслуживанию U2.

person Mike    schedule 27.03.2014