我使用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)) ;
答案 0 :(得分:4)
尝试这样的事情:
memo2.Text := TIdEncoderMIME.EncodeString(memo1.Text, IndyUTF8Encoding);
memo3.Text := TIdEncoderMIME.DecodeString(memo2.Text, IndyUTF8Encoding);