Новичок
Профиль
Группа: Участник
Сообщений: 31
Регистрация: 17.5.2009
Репутация: 1 Всего: 1
|
Имеется строка из subject письма. В OutlookExpress subject читабельный. Если я правильно понимаю, вначале нужно декодировать из Base64, а затем преобразовать koi8-r -> ansi ? Пробовал разные примеры, перерыл форум - ничего не получается. исходная строка из письма например такая: =?koi8-r?Q?WMJ.ru-=D2=C5=C3=C5=D0=D4=D9: =EE=C5=CF=C2=D9=DE=CE=CF=C5 =D0=CF=D3=D4=CE=CF=C5 =CD=C5=CE=C0! ?= после декодирования base64: ÿù(‹ÿëý?Ö0¿ë¿ÿà после koi8-r -> ansi : ÚÛ(‹ÚÊÙ?æ0¹Ê¹Úö Код | unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdBaseComponent, IdCoder, IdCoder3to4, IdCoderMIME, ConvertEncodingUnit;
type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton; IdDecoderMIME1: TIdDecoderMIME; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
type TConvertChars = array [#128..#255] of char; const Win_KoiChars: TConvertChars = ( #128,#129,#130,#131,#132,#133,#134,#135,#136,#137,#060,#139,#140,#141,#142,#143, #144,#145,#146,#147,#148,#169,#150,#151,#152,#153,#154,#062,#176,#157,#183,#159, #160,#246,#247,#074,#164,#231,#166,#167,#179,#169,#180,#060,#172,#173,#174,#183, #156,#177,#073,#105,#199,#181,#182,#158,#163,#191,#164,#062,#106,#189,#190,#167, #225,#226,#247,#231,#228,#229,#246,#250,#233,#234,#235,#236,#237,#238,#239,#240, #242,#243,#244,#245,#230,#232,#227,#254,#251,#253,#154,#249,#248,#252,#224,#241, #193,#194,#215,#199,#196,#197,#214,#218,#201,#202,#203,#204,#205,#206,#207,#208, #210,#211,#212,#213,#198,#200,#195,#222,#219,#221,#223,#217,#216,#220,#192,#209);
Koi_WinChars: TConvertChars = ( #128,#129,#130,#131,#132,#133,#134,#135,#136,#137,#138,#139,#140,#141,#142,#143, #144,#145,#146,#147,#148,#149,#150,#151,#152,#153,#218,#155,#176,#157,#183,#159, #160,#161,#162,#184,#186,#165,#166,#191,#168,#169,#170,#171,#172,#173,#174,#175, #156,#177,#178,#168,#170,#181,#182,#175,#184,#185,#186,#187,#188,#189,#190,#185, #254,#224,#225,#246,#228,#229,#244,#227,#245,#232,#233,#234,#235,#236,#237,#238, #239,#255,#240,#241,#242,#243,#230,#226,#252,#251,#231,#248,#253,#249,#247,#250, #222,#192,#193,#214,#196,#197,#212,#195,#213,#200,#201,#202,#203,#204,#205,#206, #207,#223,#208,#209,#210,#211,#198,#194,#220,#219,#199,#216,#221,#217,#215,#218);
Koi: array[0..66] of Char = ( 'T', '¨', '¸', 'À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', '×', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'Þ', 'ß', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', '÷', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'þ', 'ÿ');
Win: array[0..66] of Char = ( '¸', '¨', 'T', 'þ', 'à', 'á', 'ö', 'ä', 'å', 'ô', 'ã', 'õ', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ÿ', 'ð', 'ñ', 'ò', 'ó', 'æ', 'â', 'ü', 'û', 'ç', 'ø', 'ý', 'ù', '÷', 'ú', 'Þ', 'À', 'Á', 'Ö', 'Ä', 'Å', 'Ô', 'Ã', 'Õ', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'ß', 'Ð', 'Ñ', 'Ò', 'Ó', 'Æ', 'Â', 'Ü', 'Û', 'Ç', 'Ø', 'Ý', 'Ù', '×', 'Ú');
var Form1: TForm1;
implementation
{$R *.dfm}
{ **** UBPFD *********** by delphibase.endimus.com **** >> ïåðåêîäèðîâêà ñòðîê èç îäíîé êîäèðîâêè â äðóãóþ Çàâèñèìîñòè: Íåò Àâòîð: default Copyright: default(+VEG@-èå âåêòîðà ïåðåêîäèðîâîê) Äàòà: 3 íîÿáðÿ 2003 ã. ***************************************************** }
function CodeConversion(const SourceStr, VectorCodeConv: PChar): PChar; asm // Âõîä: SourceStr --> EAX, VectorCodeConv --> EDX // Âûõîä: Result --> EAX
PUSH EBX XOR ECX, ECX XOR EBX, EBX @@Go: TEST BYTE PTR [EAX + ECX], -1 JZ @@Exit MOV BL, BYTE PTR [EAX + ECX] MOV BL, BYTE PTR [EDX + EBX - 1] MOV BYTE PTR [EAX + ECX], BL INC ECX JMP @@Go @@Exit: POP EBX
end;
function KoiToWin(Str: string): string; var i, j, index: Integer; begin Result := '';
for i := 1 to Length(Str) do begin index := -1; for j := Low(Win) to High(Win) do if Koi[j] = Str[i] then begin index := j; Break; end;
if index = -1 then Result := Result + Str[i] else Result := Result + Win[index]; end; end;
function Koi_WinConvert(const St: string): string; var i: integer; begin Result:=St; for i:=1 to Length(St) do if St[i]>#127 then Result[i]:=Koi_WinChars[St[i]]; end;
procedure TForm1.Button1Click(Sender: TObject); var s1, s2, s3: String; begin s1:=Edit1.Text; s2:=IdDecoderMIME1.DecodeString(s1); Edit2.Text:=s2;
// s3:=CodeConversion(PChar(s2), cmKoi8RToAnsi); // s3:=ConvertEncoding(s2,'cmKoi8RToAnsi'); // s3:=KoiToWin(s2); s3:=Koi_WinConvert(s2);
Edit3.Text:=s3; end;
end.
|
в чем моя ошибка ? Это сообщение отредактировал(а) sg729 - 19.2.2010, 15:15
|