使base64解码文本可见,而不更改“非unicode程序设置的Windows语言”

时间:2012-01-24 09:09:14

标签: delphi delphi-xe delphi-xe2

我使用base64编码工具(如Indy工具)在TMemo中编码文本,但在解码结果文本后,我只得到一些“?”字符而不是正确的文本。 原文是用波斯语写的。

问题是:

如果我在波斯语中设置windows“非unicode程序的语言”,我可以看到解码的文本。但我想在不改变“windows non unicode ......”的情况下使解码后的文本可见。

大约两周我坚持这个!我尝试了“UTF8ToWideString”,“UTF8ToUTF16”,“UTF8ToUnicodeString”,“UTF8ToString”,“UTF8Decode”和“UTF8EncodeToShortString”,但没有使用它们。

编码>

  var input,output:TstringStream;
    begin
    input:=nil;
    output:=nil;
    input:=TstringStream.Create;
    output:=TstringStream.Create;
    memo1.Lines.SaveToStream(input);

    input.Position:=0;
    encoder.Encode(input,output);
    output.Position:=0;
    memo2.Clear;
    memo2.Lines.LoadFromStream(output);
    input.Free;
    output.Free
    end; 

解码>>

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 个答案:

答案 0 :(得分:4)

尝试这样的事情:

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

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