【发布时间】:2012-02-17 13:07:48
【问题描述】:
我使用 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)) ;
【问题讨论】:
-
也许你的base64编码工具无法处理原始的unicode,问题出在编码而不是解码上。尝试在 Tmemo 中只添加一个字符(问题字符之一),然后查看生成的 base64 字符串有多长。 16 位足够长,还是只有 8 位?
-
我认为编码器没有故障。因为我同时使用了 delphi 内部编码工具(EncdDecd 单元)和 IdEncode/DecodeerMime。
-
我试过你说的。我对这些东西不太了解,所以不能说生成的 sring 是 8 位还是 16 位。如果我只编码一个字符,我会得到这个 > Pw== .
-
2 '=' 表示 4 个字符将解码为单个字节。请参阅en.wikipedia.org/wiki/Base64#Decoding_Base64_with_padding 这证明信息在编码之前或期间丢失。
-
非常感谢。但是你有什么想法来解决这个问题?!
标签: delphi delphi-xe delphi-xe2