Конференция "Сети" » HTTPEncode для WideString ? [D7, WinXP]
 
  • Anatoly Podgoretsky © (21.02.12 13:56) [20]
    > Mutilator  (21.02.2012 13:48:19)  [19]

    POST запрос надо отсылать в Base64
  • Anatoly Podgoretsky © (21.02.12 13:57) [21]

    > <meta http-equiv="Content-Type" content="text/html; charset=windows-
    > 1252">

    Это не эстонская кодировка
  • Mutilator (21.02.12 14:21) [22]

    > POST запрос надо отсылать в Base64


    ну причем же тут Base64 ?

    если Mädarõigas завернуть в base64 получим TWFkYXJvaWdhcw==
    если HU$TL? HA®D завернуть в base64 получим SFUkVEyIIEhBrkQ=

    а должно быть как посылает в браузер:

    Mädarõigas = M%E4dar%F5igas
    HU$TL? HA®D = HU%24TL%80+HA%AED
  • Mutilator (21.02.12 14:23) [23]
    теперь стало ясно что мы имеем дело с windows-1252, как зная это правильно закодировать WidsString?
  • Омлет © (21.02.12 14:51) [24]
  • Омлет © (21.02.12 15:05) [25]
    И, наверное, надо выставить ANSI_CHARSET для едита, откуда приходит текст.
  • Anatoly Podgoretsky © (21.02.12 15:08) [26]
    > Mutilator  (21.02.2012 14:21:22)  [22]

    Это ANSI а не Unicode
  • Anatoly Podgoretsky © (21.02.12 15:16) [27]
    > Mutilator  (21.02.2012 14:23:23)  [23]

    Какие у тебя настройки для не Юникод программ
  • Mutilator (21.02.12 16:10) [28]

    > Какие у тебя настройки для не Юникод программ


    о чем речь? настройки в винде?
  • sniknik © (21.02.12 17:59) [29]
    > о чем речь? настройки в винде?
    ага, чтобы правильно работало не нужно преобразовывать в бникод, нужно взять как есть ANSI строку, и как есть ее конвертировать, но только под той же локалью что исходная, откуда копируешь. т.е.
    > <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    дожна быть она же. (правда тогда весь интерфейс "скракозяблиться" но ... )
    можно кстати попробовать установить локаль перед конвертацией и возвращать после... но, для этого нужно как то понимать, что ты делаешь, откуда и как текст берешь. тест короче нужен, а не обрывки "тайных знаний". ну или сам.
  • Mutilator (21.02.12 22:58) [30]
    мне нужно чтобы работала под любой виндой независимо от настроек
  • sniknik © (21.02.12 23:14) [31]
    и это все, что есть сказать? ну тогда точно сам.
  • DVM © (21.02.12 23:17) [32]

    > Mutilator   (21.02.12 00:51) [10]
    >
    > > тебе шашечки или ехать? Сервер такой метод кодирования
    > устраивает?
    >
    > Нет, сервер такую кодировку не понимает. Выводит Mädarõigas
    >
    > > Этих методов URL кодирования не один единственный и все
    >
    > > корректные.
    >
    > Что за глупость? вот заголовок к серверу


    > и как серверу понять каким именно образом раскручивать передаваемые
    > данные, если в заголовке от браузера нет метода кодировки?
    >

    Может сначала почитал бы про URL кодирование что-то прежде чем бросаться словами "глупость и прочее". Представь себе, серверу зачастую приходится угадывать, в какой кодировке к нему поступили URL кодированные данные. Почему? Все очень просто. Допустим, серверу пердана последовательность %EA%EE% (здесь два символа к и о) - эти 2 байта с одинаковым успехом могут представлять собой как 1 символ UTF8 так и 2 символа ANSI. С помощью специальных статистических (и иных) методов большинство серверов умеет определять что реально было закодировано. Другой вариант кодирования, когда двухбайтные символы кодируются как  %u043A%u043E (здесь два символа к и о). Есть еще третий вариант, который описывать не буду.
  • DVM © (21.02.12 23:23) [33]

    > Mutilator   (21.02.12 14:23) [23]
    > теперь стало ясно что мы имеем дело с windows-1252, как
    > зная это правильно закодировать WidsString?

    Конвертировать в нужную локаль с помощью WideStringToMultibyte и потом получившийся набор байт URL кодировать. Наверное так.
  • DVM © (21.02.12 23:24) [34]

    > WideStringToMultibyte

    WideCharToMultibyte то есть
  • Anatoly Podgoretsky © (22.02.12 09:43) [35]
    > Mutilator  (21.02.2012 22:58:30)  [30]

    Без настроек когда это Unicode и у сервера правильная кодировка или utf08
    или 1256
  • Mutilator (29.02.12 22:16) [36]
    задача решена фрилансером за 30 секунд, вот рецепт:

    uses TntSystem;
    .......

    ShowMessage(HTTPEncode(WideStringToStringEx(edt.Text, 1252)));

    где edt - tntEdit
  • sniknik © (29.02.12 23:16) [37]
    какие длинные 30 секунд получились... :)
    а там ты тоже начал с того, что здесь, или с выясненного здесь - "нужно из юникода получить url кодирование в 1252"?
  • Anatoly Podgoretsky © (01.03.12 10:34) [38]
    Задача не решена, а временно замаскировано, непрофессиональная работа
  • DVM © (01.03.12 22:12) [39]

    > Mutilator   (29.02.12 22:16) [36]

    если бы вдумался в написанное мной в [33] то может не понадобился бы ни фриленсер, ни модуль TNTSystem.
 
Конференция "Сети" » HTTPEncode для WideString ? [D7, WinXP]
Есть новые Нет новых   [134435   +18][b:0][p:0.001]