Перекодировка
Clarion, Clarion 7
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Перекодировка
Подскажите, есть процедуры для перекодировки такой строки "\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442" в ANSI
PavelNK
- Игорь Столяров
- Ветеран движения
- Сообщения: 8074
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 98 раз
Перекодировка
А в чем проблема в цикле прокрутить строку, распарсить на коды символов и перекодировать строку кодов в ANSI ?
Работы - на час. Если есть потребность - просто надо сделать и все. Или я что-то не понял в глубине постановки задачи ?
Работы - на час. Если есть потребность - просто надо сделать и все. Или я что-то не понял в глубине постановки задачи ?
Make Clarion Great Again ! 
Игорь Столяров
Перекодировка
Хотелось бы иметь полноценную проверенную рабочую процедуру, т.к. в строке, кроме букв, могут присутствовать служебные и управляющие символы, например ВК или ПС и т.д.. Но я, к сожалению, впервые сталкиваюсь с этим, поэтому могу не знать каких-то нюансов и особенностей. А вдруг у кого-нибудь есть уже готовая процедура.
PavelNK
- Игорь Столяров
- Ветеран движения
- Сообщения: 8074
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 29 раз
- Поблагодарили: 98 раз
Перекодировка
Вы рассуждаете как программист на Clarion !
Ну, подождите. Может быть действительно кто-то решал такую задачу или есть шаблон ....

Ну, подождите. Может быть действительно кто-то решал такую задачу или есть шаблон ....
Make Clarion Great Again ! 
Игорь Столяров
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Перекодировка
В Clarion 10 есть класс JSONDataClass
По моему он должен этим заниматься судя по http://stackoverflow.com/questions/9713 ... caped-text
На php в пару строк кстати декодится.
По моему он должен этим заниматься судя по http://stackoverflow.com/questions/9713 ... caped-text
На php в пару строк кстати декодится.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Admin
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Перекодировка
Нужен пример строки с переводом символов и т.д., т.к. с ходу непонятно о чем речь.PavelNK писал(а): Хотелось бы иметь полноценную проверенную рабочую процедуру, т.к. в строке, кроме букв, могут присутствовать служебные и управляющие символы, например ВК или ПС и т.д.. Но я, к сожалению, впервые сталкиваюсь с этим, поэтому могу не знать каких-то нюансов и особенностей. А вдруг у кого-нибудь есть уже готовая процедура.
Вообще эта строка просто слово "стандарт" в юникоде.
Код: Выделить всё
/u0441 - с
/u0442 - т
/u0430 - а
/u043d - н
/u0434 - д
/u0430 - а
/u0440 - р
/u0442 - т
Прошу прощения за убогий текст. На коленке состряпал в меру ума

Код: Выделить всё
PROGRAM
MAP
module('API')
WideCharToMultiByte(long CodePage, long dwFlags, long lpWideCharStr, long cchWideChar,long lpMultiByteStr, long cbMultiByte, long lpDefaultChar,long lpUsedDefaultChar),long,pascal
end
StrHexToLong(STRING xHex),LONG
END
EncodedString STRING('/u0441/u0442/u0430/u043d/u0434/u0430/u0440/u0442')
loc:unicode STRING(2)
unicode_group GROUP,OVER(loc:unicode)
unicode_character USHORT
END
loc:cp1251 STRING(1)
result CSTRING(1024)
CODE
LOOP
Pos# = INSTRING('/u',EncodedString,1,Pos#+1)
if Pos#
unicode_group.unicode_character = StrHexToLong(SUB(EncodedString,Pos#+2,4))
Err# = WideCharToMultiByte(1251, 0, ADDRESS(loc:unicode), 1, ADDRESS(loc:cp1251), SIZE(loc:cp1251), 0, 0)
result = result & loc:cp1251
end
WHILE Pos#
MESSAGE(result)
StrHexToLong PROCEDURE (STRING xHex)
Rtn LONG(0)
Hex STRING('0123456789ABCDEF')
H STRING(1)
Multiplier LONG(0)
Value BYTE(0)
Len BYTE(0)
Ndx BYTE(0)
CODE
Len = LEN(CLIP(xHex))
xHex = UPPER(xHex)
IF xHex[Len] = 'H' THEN
xHex[Len] = ''
Len -= 1
END
CLEAR(Multiplier)
LOOP Ndx = Len TO 1 BY - 1
H = xHex[Ndx]
Value = INSTRING(H,Hex,1,1)
IF Multiplier THEN
Multiplier *= 16
ELSE
Multiplier = 1
END
Rtn += ((Value-1) * Multiplier)
END
RETURN Rtn
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Admin
-
- ✯ Ветеран ✯
- Сообщения: 5174
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Перекодировка
PavelNK молчит, ждёт нового релиза. Там будет функция ToUSTRING, в качестве аргумента в которую подставляется строка типа той, что у него.
We are hard at work… for you. 

kreator
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Перекодировка
Да не вопрос. Просто делать нечего было.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Admin
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1412
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
Перекодировка
Кому делать нечего - напишите SSL на сокетах в Кларе, очень нужно для работы почты, прям очень-очень
Вот тут есть пример на С но к сожалению я на С никогда не писал даже Hello World и ничего не понимаю
Замучался я всем ставить stunnel. Исходники почтовой библиотеки, куда надо это добавить, я в одной из соседних тем выкладывал
RaFaeL
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Перекодировка
Не на столько.

Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Admin
Перекодировка
Хочется иметь грамотно написанную функцию. Например, самописную функцию StrHexToLong правильней заменить на
strtol(*cstring,long,long),long,raw,name('_strtol')
Кроме того, есть еще и управляющие символы, например \n или \r. А в приведенной функции они не обрабатываются.
А вот сам код мне понравился = 5+.
strtol(*cstring,long,long),long,raw,name('_strtol')
Кроме того, есть еще и управляющие символы, например \n или \r. А в приведенной функции они не обрабатываются.
А вот сам код мне понравился = 5+.
PavelNK
- RaFaeL
- ✯ Ветеран ✯
- Сообщения: 1412
- Зарегистрирован: 24 Март 2009, 17:59
- Откуда: НН
- Благодарил (а): 12 раз
- Поблагодарили: 2 раза
- Контактная информация:
Перекодировка
PavelNK,
Скажите, за год появилось что-то красивое и максимально отлаженное?
Тоже очень актуально!
Скажите, за год появилось что-то красивое и максимально отлаженное?
Тоже очень актуально!
RaFaeL
Перекодировка
Не видел, думаю нет. Пришлось впопыхах, быстро, криво и в лоб, писать самому. Взял какой-то пример с инета и переделал под клашу
PavelNK
RaFaeL
Перекодировка
Код: Выделить всё
DecodeStr FUNCTION (string sIn) ! Declare Procedure
CP_ACP0 EQUATE (0) ! CodePage Ansii
i LONG
c STRING(1)
c1 STRING(1)
c2 STRING(16)
c3 CSTRING(16)
c4 CSTRING(16)
sOut &CSTRING
sBuf &CSTRING
ul ULONG
Blength LONG
Slength LONG
RetCode LONG
CODE ! Begin processed code
i = 0
Blength = len(clip(sIn)) + 100
sOut &= NEW(CSTRING(Blength))
clear(sOut)
loop 1000000 times
i += 1
if len(clip(sIn)) < i then break.
c = sub(sIn,i,1)
if c = '\'
c1 = sub(sIn,i+1,1)
case c1
of 'b'
sOut = sOut &'<08>'
of 't'
sOut = sOut &'<09>'
of 'n'
sOut = sOut &'<10>'
of 'f'
sOut = sOut &'<12>'
of 'r'
sOut = sOut &'<13>'
of 'u'
clear(c2)
c3 = sub(sIn,i+4,2)
ccc1# = strtol(c3,ccc2#,16)
c2[1] = chr(ccc1#)
c3 = sub(sIn,i+2,2)
ccc1# = strtol(c3,ccc2#,16)
c2[2] = chr(ccc1#)
memset(c3,0,size(c3))
memset(c4,0,size(c4))
c4 = clip(c2)
Blength = size(c4)
Slength = size(c3)
RetCode = WideCharToMultiByte (CP_ACP0, 0, address(c4), Blength, address(c3), Slength, 0, 0)
sOut = sOut & clip(c3)
i += 4
else
sOut = sOut & clip(c1)
end
i += 1
else
sOut = sOut & c
end
end
RETURN(sOut)
PavelNK
Вернуться в «CLARION for Windows»
Перейти
- CW
- ↳ CLARION for Windows
- ↳ CLARION for Internet
- ↳ Clarion.NET
- Эксклюзив
- ↳ Приват
- CLARION и...
- ↳ Reports
- ↳ Железо
- ↳ Готовые программы, шаблоны, библиотеки...
- ↳ cJSON
- ↳ LibCurl
- ↳ MAV
- ↳ SQL, Oracle, ...
- ↳ Multi-программирование(Pascal/Delphi, и т.д.)
- ↳ WinDev
- DOS
- ↳ CLARION for DOS
- Разное
- ↳ Новости
- ↳ English
- ↳ Ресурсы
- ↳ Работа
- ↳ Обо всем ...
- ↳ Обсуждение этого Форума (типа, Гостевая книга)