сделать видимым декодированный base64 текст без изменения «языка Windows для настроек программы, не поддерживающих Юникод» » - PullRequest
2 голосов
/ 24 января 2012

Я кодировал текст в TMemo, используя инструменты кодирования base64 (например, инструменты Indy), но после декодирования текста результата я просто получаю несколько символов «?» Вместо правильного текста.исходный текст написан на персидском языке.

ВОПРОС ЕСТЬ:

Я могу увидеть декодированный текст, если на персидском языке установить Windows "язык для программ, не поддерживающих Юникод".но я хочу сделать декодированный текст видимым, не меняя "windows non unicode ...".

Уже около двух недель я застрял на этом!Я пытался "UTF8ToWideString", "UTF8ToUTF16", "UTF8ToUnicodeString", "UTF8ToString", "UTF8Decode" и "UTF8EncodeToShortString", но ни один из них не работал.

1000 *1000* кодирование>>

var input,output:TStringStream;
  begin
  memo3.Clear;
  input:=nil;
  output:=nil;
  input:=TStringStream.Create();
  output:=TStringStream.Create();
  memo2.Lines.SaveToStream(input);
  input.Position:=0;
  decoder.DecodeBegin(output);
  decoder.Decode(input);
  decoder.DecodeEnd;
  output.Position:=0 ;
  memo3.Lines.Add(output.DataString);
   end;

Я также попробовал инструменты внутреннего кодирования delphi.следующим образом

// encoding >
memo2.Lines.Add(EncodeString(memo1.Lines.Text))
// decoding>

 memo3.lines.add(DecodeString(memo2.Lines.Text)) ;

1 Ответ

4 голосов
/ 25 января 2012

Попробуйте что-то вроде этого:

memo2.Text := TIdEncoderMIME.EncodeString(memo1.Text, IndyUTF8Encoding);

memo3.Text := TIdEncoderMIME.DecodeString(memo2.Text, IndyUTF8Encoding);
...