Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Функция URLEnode [C#] (https://forum.antichat.xyz/showthread.php?t=51052)

[x26]VOLAND 12.10.2007 17:27

Функция URLEnode [C#]
 
Нужен исходник функции URLEncode для C#.
Юзать стандартный метод httpUtility.Urlencode(string) не хочу, так как он странно работает:
К примеру, буква "д" в нормальной урл-кодировке выглядит как %E4, а через httpUtility.Urlencode(string) получается %d0%b4 :(

Скорее всего дело в различном способе парсинга символов в char-коды. Букве "д" соответствует код 228, а вот в httpUtility.Urlencode(string) буква "д" имеет код 388, и поэтому раскладывает код на два числа:
388 = %d0 + %b4 (т.е. 388 = 208 + 180),
Нужно чтобы символы кодировались нормально, без разложения.

Уже весь инет перерыл, ничего путного не нашёл.

inv 12.10.2007 17:33

http://binboy.sphere.pl/index.php?show=usenet&p1=article.php&id=3179&group =pl.comp.lang.c (для си)


самому не судьба что ли?

DWORD 12.10.2007 17:34

Цитата:

Скорее всего дело в различном способе парсинга символов в char-коды. Букве "д" соответствует код 228, а вот httpUtility.Urlencode(string) не поддерживает символы большими кодами, и поэтому раскладывает код на два числа:
%e4 = %d0 + %b4 (т.е. 228 = 208 + 20),
Вот так загнул ну ты даешь! %d0%b4 это просто UTF8 представление буквы.
Если интересно вот алгоритм на php как составляется UTF8 из cp1251
Код:

function CP1251toUTF8($string){
        $out = '';
        for ($i = 0; $i<strlen($string); ++$i){
                $ch = ord($string{$i});
                if ($ch < 0x80)
                        $out .= chr($ch);
                else
                        if($ch >= 0xC0)
                                if($ch < 0xF0)
                                        $out .= "\xD0".chr(0x90 + $ch - 0xC0);
                                else
                                        $out .= "\xD1".chr(0x80 + $ch - 0xF0);
                        else
                        switch($ch){
                                case 0xA8: $out .= "\xD0\x81"; break;
                                case 0xB8: $out .= "\xD1\x91"; break;
                                  case 0xA1: $out .= "\xD0\x8E"; break;
                                case 0xA2: $out .= "\xD1\x9E"; break;
                                case 0xAA: $out .= "\xD0\x84"; break;
                                case 0xAF: $out .= "\xD0\x87"; break;
                                case 0xB2: $out .= "\xD0\x86"; break;
                                case 0xB3: $out .= "\xD1\x96"; break;
                                case 0xBA: $out .= "\xD1\x94"; break;
                                case 0xBF: $out .= "\xD1\x97"; break;
                                case 0x8C: $out .= "\xD3\x90"; break;
                                case 0x8D: $out .= "\xD3\x96"; break;
                                case 0x8E: $out .= "\xD2\xAA"; break;
                                case 0x8F: $out .= "\xD3\xB2"; break;
                                case 0x9C: $out .= "\xD3\x91"; break;
                                case 0x9D: $out .= "\xD3\x97"; break;
                                case 0x9E: $out .= "\xD2\xAB"; break;
                                case 0x9F: $out .= "\xD3\xB3"; break;
                        }
        }
        return $out;
}


W!z@rD 12.10.2007 22:07

msdn
 
HttpUtility.UrlEncode (String, Encoding) Encodes a URL string using the specified encoding object.

это не подходит?


Время: 04:22