Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Перекодировка УРЛ-ов / 17 сообщений из 17, страница 1 из 1
15.09.2008, 13:20
    #35539425
mys
mys
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекодировка УРЛ-ов
Вот имеем к примеру такой УРЛ:
http://yandex.ru/yandsearch?text=%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80&clid=9582&lr=187
Возможно ли перекодировать значение переменной text из UTF-8 в читабельный вид средствами Каше? Поидее, перекодировка должна производиться с помощью $zcvt("http://yandex.ru/yandsearch?text=%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80&clid=9582&lr=187","I","URL")
но на выходе получем что-то типа http://yandex.ru/yandsearch?text=?????????µ??&clid=9582&lr=187
В каше используется кодировка ср1251.
...
Рейтинг: 0 / 0
15.09.2008, 14:26
    #35539595
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекодировка УРЛ-ов
Код: plaintext
1.
zzdump $zcvt("%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80","I","URL")
  0000 : 3F 3F 3F 3F 3F 3F 3F 3F 3F B5 3F 3F

Закодировано слово "Пример"
Причем
1. Если сделать в каше $zcvt("Пример","O","URL") и подставить это в строку поиска яндекса, то это будет работать
2. Число символов в строке яндекса - 12, а в слове пример 6
сравните
Код: plaintext
1.
2.
w $zcvt($zcvt("Пример","O","UTF8"),"O","URL")
%D0%9F%D1% 80 %D0%B8%D0%BC%D0%B5%D1% 80 
(правда вторая буква у вас какая-то странная).

То есть при отправке адрес переводится в юникод и затем кодируется через %

Но как решить вашу проблему - я не знаю
...
Рейтинг: 0 / 0
15.09.2008, 15:08
    #35539734
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекодировка УРЛ-ов
>>Возможно ли перекодировать значение переменной text из UTF-8 в читабельный вид средствами Каше?

Это не просто UTF8 - это escape кодированый UTF8.

Код: plaintext
1.
2.
3.
4.
5.
s a="http://yandex.ru/yandsearch?text=%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80&clid=9582&lr=187"
 
w $ZCVT($ZCVT(a,"I","URL"),"I","UTF8")

http://yandex.ru/yandsearch?text=пример&clid= 9582 &lr= 187 
...
Рейтинг: 0 / 0
15.09.2008, 17:46
    #35540389
mys
mys
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекодировка УРЛ-ов
Код: plaintext
1.
w $zcvt($zcvt("пример","O","UTF8"),"O","URL")
%D0%BF%D1% 80 %D0%B8%D0%BC%D0%B5%D1% 80 
Да, действительно, данная операция осуществляет нормальную перекодировку. Однако обратная:
Код: plaintext
1.
w $zcvt($zcvt("%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80","I","URL"),"I","UTF8")
????????????
работать не хочет, а должна...
...
Рейтинг: 0 / 0
15.09.2008, 18:25
    #35540494
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекодировка УРЛ-ов
Если посмотреть на zzdump, то видно, что обратной перекодировки не происходит - все символы одинаковые. То ли что-то делать с таблицей перекодировки, то ли писать свой перекодировщик :-(
...
Рейтинг: 0 / 0
15.09.2008, 18:43
    #35540533
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекодировка УРЛ-ов
Смотрит внимательно ... дык вы последовательность то соблюдайте

RAW в данном случае = cp1251

Строка(URL_coded_UTF8) -> $ZCTV(xxx,"I","URL") = Строка(UTF8) -> $ZCTV(xxx,"I","UTF8") = Строка(RAW)

Строка(RAW) -> $ZCTV(xxx,"O","UTF8") = Строка(UTF8) -> $ZCTV(xxx,"O","URL") = Строка(URL_coded_UTF8)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
>s a="http://yandex.ru/yandsearch?text=%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80&clid=9582&lr=187"
 
>s b=$ZCVT($ZCVT(a,"I","URL"),"I","UTF8") w !,b

http://yandex.ru/yandsearch?text=пример&clid= 9582 &lr= 187 

>s x=$ZCVT($ZCVT(b,"O","UTF8"),"O","URL") w !,x

http%3A//yandex.ru/yandsearch%3Ftext%3D%25D0%25BF%25D1% 2580 %25D0%25B8%25D0%25BC%
25D0%25B5%25D1% 2580 %26clid%3D9582%26lr%3D187

Правда в результате получается немного не то (URL преоброзование кодирует лишнее ) - следовательно URL сначала нужно парсить - сначало до пораметров (?) и потом каждый параметр отедельно (&)
...
Рейтинг: 0 / 0
15.09.2008, 18:45
    #35540536
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекодировка УРЛ-ов
>>работать не хочет, а должна

А у Вас кодировка то родная в терминале какая ? (вон тут в соседней теме проблемы с отображением в зависимости от настроект терминала)

Результат в глобал сохраните - там тоже строка из "????"
...
Рейтинг: 0 / 0
15.09.2008, 18:47
    #35540541
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекодировка УРЛ-ов
Код: plaintext
1.
USER>w $zcvt($zcvt("%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80","I","URL"),"I","UTF8")
пример
...
Рейтинг: 0 / 0
16.09.2008, 05:35
    #35540986
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекодировка УРЛ-ов
Ptn
Код: plaintext
1.
USER>w $zcvt($zcvt("%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80","I","URL"),"I","UTF8")
пример


Код: plaintext
1.
w $zcvt($zcvt("%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80","I","URL"),"I","UTF8")
????????????
Cache for Windows (x86-32) 2008.1.1 (Build 578) Thu Jun 26 2008 16:38:28 EDT

Ptn, у вас какая версия?
...
Рейтинг: 0 / 0
16.09.2008, 07:15
    #35541012
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекодировка УРЛ-ов
Код: 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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
/// Cache for Windows NT (Intel)  5 . 0 . 5  (Build  936  AdHoc  2014 ) Thu Nov  18   2004   18 : 01 : 09  RST

USER>w $zcvt($zcvt("%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80","I","URL"),"I","UTF8")
пример

USER>w $zm,!! d DispIOProc^%NLSMISC
RY\CP1251\K\RAW\
 
 
Process I/O       Offset:Type     Name
-----------       -------------   ----
Process           E60402:ByteStr  RAW
Direct Term       E60402:ByteStr  RAW
Telnet/LAT        E60402:ByteStr  RAW
File              E60402:ByteStr  RAW
Magtape           E60402:ByteStr  RAW
Network           E60402:ByteStr  RAW
DSM-DDP           E60402:ByteStr  RAW
DTM-DCP           E60402:ByteStr  RAW
SysCalls          E60402:ByteStr  RAW
Printer           E60402:ByteStr  RAW

///Cache-8bit 
///Cache for Windows (x86- 64 )  2008 . 1 . 1  (Build  578 ) Thu Jun  26   2008   14 : 09 : 54  EDT
// Сетевая кодировка ISO
USER>w $zcvt($zcvt("%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80","I","URL"),"I","UTF8")
????????????

// Сетевая кодировка Windows
USER>w $zcvt($zcvt("%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80","I","URL"),"I","UTF8")
????????????

// Сетевая кодировка UTF8
USER>w $zcvt($zcvt("%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80","I","URL"),"I","UTF8")
????????????

USER>w $zm,!! d DispIOProc^%NLSMISC
RY\CP1251\K\RAW\
 
 
Process I/O       Offset:Type     Name
-----------       -------------   ----
Process           2010402 :ByteStr  RAW
Direct Term       2010402 :ByteStr  RAW
Telnet/LAT        2010402 :ByteStr  RAW
File              2010402 :ByteStr  RAW
Magtape           2010402 :ByteStr  RAW
Network           2010402 :ByteStr  RAW
DSM-DDP           2010402 :ByteStr  RAW
DTM-DCP           2010402 :ByteStr  RAW
SysCalls          2010402 :ByteStr  RAW
Printer           2010402 :ByteStr  RAW


/// Ensemble - Unicode 
///Cache for Windows (x86- 64 )  2008 . 1 . 1  (Build 579U) Wed Jul  2   2008   15 : 50 : 19  EDT
// Сетевая кодировка ISO
USER>w $zcvt($zcvt("%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80","I","URL"),"I","UTF8")
??N??z???чN?

// Сетевая кодировка Windows
USER>w $zcvt($zcvt("%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80","I","URL"),"I","UTF8")
РїС?РёР?РчС?

// Сетевая кодировка UTF8
USER>w $zcvt($zcvt("%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80","I","URL"),"I","UTF8")
пример

USER>w $zm,!! d DispIOProc^%NLSMISC
RY\LatinC\K\UTF8\
 
 
Process I/O       Offset:Type     Name
-----------       -------------   ----
Process          21E0402:ByteStr  RAW
Direct Term      21E040A:ByteStr  UTF8
Telnet/LAT       21E0402:ByteStr  RAW
File             21E040A:ByteStr  UTF8
Magtape          21E0402:ByteStr  RAW
Network          21E0402:ByteStr  RAW
DSM-DDP          21E0402:ByteStr  RAW
DTM-DCP          21E0402:ByteStr  RAW
SysCalls         21E0402:ByteStr  RAW
Printer          21E0922:ByteStr  CP1251

Вот такая беда. Перенос кода в программу с последующим её вызовом не помог.

ЗЫ: возможно есть смысл посмотреть соседню ветку про NLS а возможно есть повод обратиться в WRC
...
Рейтинг: 0 / 0
16.09.2008, 08:59
    #35541101
CJIECAPb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекодировка УРЛ-ов
Мы у себя не стали с этим париться, а просто экспортнули таблицу трансляции URL из 5.0 и вгрузили её в 2008.1.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
21.01.2011, 13:41
    #37071305
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекодировка УРЛ-ов
Че-то или я торможу, или лыжи не тем смазаны
В одну сторону перекодруется, а назад уже нет.

Код: plaintext
1.
2.
3.
4.
>w $zcvt("Привет","O","URL")
%CF%F0%E8%E2%E5%F2

>w $zcvt("%CF%F0%E8%E2%E5%F2","I","URL")
??????

Причем, если я вот это %CF%F0%E8%E2%E5%F2 передаю как параметр URL, а потом ловлю его через %request.Get(), то принимается нормально. В чем причина?
...
Рейтинг: 0 / 0
21.01.2011, 14:31
    #37071478
barl_alibek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекодировка УРЛ-ов
Блок А.Н.,

у меня выходит
Код: plaintext
1.
2.
3.
>w $zcvt("рот","O","URL")
%u0440%u043E%u0442
>w $zcvt("%u0440%u043E%u0442","I","URL")
рот
...
Рейтинг: 0 / 0
21.01.2011, 14:36
    #37071499
barl_alibek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекодировка УРЛ-ов
у меня стоит unicode, может дело в этом
...
Рейтинг: 0 / 0
21.01.2011, 14:43
    #37071533
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекодировка УРЛ-ов
barl_alibekу меня стоит unicode, может дело в этом
Я вот тоже спробанул...

Код: plaintext
1.
2.
3.
4.
5.
REG>w $zcvt("рот","O","URL")
%F0%EE%F2
REG>w $zcvt("%u0440%u043E%u0442","I","URL")
рот
REG>w $zv
Cache for Windows (x86-64) 2009.1.3 (Build 704_0_9104) Mon Mar 8 2010 17:00:35 EST
...
Рейтинг: 0 / 0
21.01.2011, 18:42
    #37072211
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекодировка УРЛ-ов
хм, у меня тоже
Код: plaintext
1.
2.
>w $zcvt("%u0440%u043E%u0442","I","URL")
рот
Какая-то несимметричная перекодировка, странно.
...
Рейтинг: 0 / 0
21.01.2011, 19:08
    #37072240
barl_alibek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекодировка УРЛ-ов
Блок А.Н.,

я тоже заметил иксДЭ
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Перекодировка УРЛ-ов / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]