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

发布于 2024-12-28 10:20:33 字数 1331 浏览 3 评论 0原文

我使用 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)) ;

I encoded a text in a TMemo using base64 encoding tools ( like Indy tools ) but after decoding the result text, I just get some " ? " characters instead of the correct text .
the original text is in persian language .

THE QUESTION IS :

I can see the decoded text if I set the windows"language for non unicode programs " on persian language . but I wanna make the decoded text visible without changing the " windows non unicode ... " .

Its about two weeks Im stuck on this ! I tried "UTF8ToWideString" , "UTF8ToUTF16","UTF8ToUnicodeString","UTF8ToString","UTF8Decode" and "UTF8EncodeToShortString" but non of them worked.

Encoding >

  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; 

Decoding >>

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;

I also tried delphi internal encoding tools . as following

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蓝颜夕 2025-01-04 10:20:33

尝试这样的事情:

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

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

Try something like this instead:

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

memo3.Text := TIdEncoderMIME.DecodeString(memo2.Text, IndyUTF8Encoding);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文