【问题标题】:Delphi decoded base64 to somethingDelphi 将 base64 解码为某种东西
【发布时间】:2020-11-02 16:14:05
【问题描述】:

我在解码时有点卡住了。我得到了一个 base64 编码的 .rtf 文件。

其中的一小部分如下所示:Bek\u252\''fcld\u337\''3f

代表:Beküldő

但是我解码后的输出数据是:Bekuld?

如果我手动替换字符就可以了。

StringReplace(Result, 'U337\''3F', '''F5', [rfReplaceAll, rfIgnoreCase]);

有人知道这个的通用解决方案吗?聊聊什么的?

【问题讨论】:

  • 嗨 - 欢迎来到 Stack Overflow 上的 Delphi。请具体说明您的问题 - 您显示的片段不是您所说的内容的 Base64 编码版本。如果您不清楚问题,很难知道如何最好地帮助您。如果您的输入是正确的 Base64 编码,那么您应该能够生成输入的二进制等效项。如果你想把它当作一个字符串,你需要确保你的解码是允许的。例如,UTF8 和 UTF16LE 不是相同的二进制输入。
  • RTF 不是 base64 编码的。处理此问题的最佳方法是使用实​​际的 RTF 解析器、(无头)RichEdit 控件等为您解码 RTF,然后您可以从输出中提取所需的文本。
  • @RemyLebeau 他没有说 rtf 是 base-64 编码的。他写道,他“得到了一个 base-64 编码的 .rtf 文件”。
  • @RobLambden IIRC RTF 尝试仅是 7 位 ASCII,并转义大多数非 ASCII 字符,例如 é而不是é。实际中可能有 8 位 WinAnsi 内容,具体取决于 RTF 编写器。但绝对不是 UTF-16。 RTF 是一个非常复杂的野兽。它默认定义\ansi,即WinAnsi / codepage 1252。

标签: delphi delphi-2010 delphi-xe


【解决方案1】:

例如,\u242 表示 Unicode 字符 #242。

因此您可以在 RTF 内容中搜索 \u(忽略任何 \\ 转义序列),然后检索以下数字,并将其用作字符。

但是 RTF 是一个非常复杂的野兽。

查看the RTF 1.5 specifications 对编码的看法:

\uN 这个关键字代表一个单一的 Unicode 字符,它没有 基于当前 ANSI 代码页的等效 ANSI 表示。 N 表示以十进制数表示的 Unicode 字符值。 此关键字后紧跟等效字符 ANSI 表示。这样老读者就会忽略\uN 关键字并正确选择 ANSI 表示。当这 遇到关键字,请读者忽略下一个N 字符,其中N 对应于遇到的最后一个\ucN 值。

也许最简单的方法是在 Windows/VCL 下使用隐藏的 RichEdit 进行解码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多