доброе время суток ачатовцам у меня возникла одна проблемка с кодировками в дельфи. поснифил одну программку, она отсылала post с параметрами в непонятной кодировке Расшифровалось без проблем, но дело не в этом. Дело в том ,что мне нужно написать аналог этой программы. И нужно обычный ANSI текст перекодировать в эту же крокозябру. Желательно с помощью дельфи.
На делфи нет, на билдере как-то так: PHP: //--------------------------------------------------------------------------- String MultibyteToUTF8(String sSource) { WideString wsStr = sSource; String sTarget; char *pTargetData = NULL; int iTargetLen = WideCharToMultiByte(CP_UTF8, 0, wsStr, -1, pTargetData, 0, NULL, NULL); pTargetData = new char[iTargetLen + 1]; memset(pTargetData, 0, iTargetLen + 1); WideCharToMultiByte(CP_UTF8, 0, wsStr, -1, pTargetData, iTargetLen, NULL, NULL); char *data = pTargetData; sTarget = data; delete []pTargetData; pTargetData = NULL; return sTarget; } //---------------------------------------------------------------------------
спасибо за попытку помочь, но для меня билдер - темный лес) дельфи знаю неплохо, но вот с кодировками никогда не работал. в Рунете ответа я не нашел, а в буржунет лезть не очень то хочется)
Эти подойдут? Code: function EncodeBase64(const inStr: string): string; function Encode_Byte(b: Byte): char; const Base64Code: string[64] = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; begin Result := Base64Code[(b and $3F)+1]; end; var i: Integer; begin i := 1; Result := ''; while i <=Length(InStr) do begin Result := Result + Encode_Byte(Byte(inStr[i]) shr 2); Result := Result + Encode_Byte((Byte(inStr[i]) shl 4) or (Byte(inStr[i+1]) shr 4)); if i+1 <=Length(inStr) then Result := Result + Encode_Byte((Byte(inStr[i+1]) shl 2) or (Byte(inStr[i+2]) shr 6)) else Result := Result + '='; if i+2 <=Length(inStr) then Result := Result + Encode_Byte(Byte(inStr[i+2])) else Result := Result + '='; Inc(i, 3); end; end; Code: function DecodeBase64(const CinLine: string): string; const RESULT_ERROR = -2; var inLineIndex: Integer; c: Char; x: SmallInt; c4: Word; StoredC4: array[0..3] of SmallInt; InLineLength: Integer; begin Result := ''; inLineIndex := 1; c4 := 0; InLineLength := Length(CinLine); while inLineIndex <=InLineLength do begin while (inLineIndex <=InLineLength) and (c4 < 4) do begin c := CinLine[inLineIndex]; case c of '+' : x := 62; '/' : x := 63; '0'..'9': x := Ord(c) - (Ord('0')-52); '=' : x := -1; 'A'..'Z': x := Ord(c) - Ord('A'); 'a'..'z': x := Ord(c) - (Ord('a')-26); else x := RESULT_ERROR; end; if x <> RESULT_ERROR then begin StoredC4[c4] := x; Inc(c4); end; Inc(inLineIndex); end; if c4 = 4 then begin c4 := 0; Result := Result + Char((StoredC4[0] shl 2) or (StoredC4[1] shr 4)); if StoredC4[2] = -1 then Exit; Result := Result + Char((StoredC4[1] shl 4) or (StoredC4[2] shr 2)); if StoredC4[3] = -1 then Exit; Result := Result + Char((StoredC4[2] shl 6) or (StoredC4[3])); end; end; end;