在 Inno Setup 中将字符串编码为 Base64(Inno Setup 的 Unicode 版本)

2024-01-10

Problem

我尝试使用帕斯卡函数EncodeStringBase64,假设 Inno Setup 可以访问 Pascal 标准库,但它无法找到它并提供一个Unknown Identifier error.

https://www.freepascal.org/docs-html/fcl/base64/encodestringbase64.html https://www.freepascal.org/docs-html/fcl/base64/encodestringbase64.html

我还发现了这段代码来执行转换,但它似乎仅限于 AnsiStrings。

https://github.com/docker/toolbox/blob/master/windows/base64.iss https://github.com/docker/toolbox/blob/master/windows/base64.iss

Question

理想情况下,我想使用标准库函数,有什么方法可以访问它吗?

如果不是,如果我更改签名,使用 AnsiStrings 的代码可以安全地在普通 Unicode 字符串上使用吗?

我打算对其进行测试,但我担心我会测试大量用例,但这并不能保证它实际上适合every字符,并且可能存在边缘情况。


Base64 编码bytes, not 人物(字符串)。这也可能是原因,为什么Encode64您发现实施需要AnsiString. AnsiString在 Inno Setup Pascal 脚本中通常(滥用)用作动态数组bytes. While string是一个数组人物.

如果要对字符串进行编码,首先必须将字符串表示为字节数组(以 Base64 编码字符串的接收者期望的方式),然后可以使用Encode64执行。

如果你只编码 ASCII 字符,你可以盲目地转换string to AnsiString。如果您使用非 ASCII 字符,您可能需要转换您的UnicodeString使用某种编码(例如 UTF-8)转换为字节。

至于结果字符串,您可以安全地从AnsiString to string,因为 Base64 仅使用 ASCII 字符(不过,更改函数签名以返回也是有意义的)string,确实如此returns字符串,而不是字节数组)。

因此对于 ASCII 输入,可以这样做:

Base64 := string(Encode64(AnsiString(S)));

如果你想使用“标准”功能,你可以使用CryptBinaryToStringWinAPI函数 https://learn.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptbinarytostringw。尽管这不会让您免于解决上述问题,因为该函数在输入上接受一个字节数组(如预期的那样)。


仅当您使用 Unicode Inno Setup(正确操作)时,上述内容才会有所不同。如果您使用了 Ansi Inno Setup(您不应该使用的),string is AnsiString.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Inno Setup 中将字符串编码为 Base64(Inno Setup 的 Unicode 版本) 的相关文章

随机推荐

  • iOS 中的相机和照片库一起

    我正在创建一个应用程序 我需要在同一个屏幕上同时显示相机和照片库 屏幕的上半部分将有相机 屏幕的下半部分将有照片库 请参阅屏幕截图 另请告诉我这是否可行 如果可能 请帮助我如何做到这一点 谢谢 你尝试过Instagram http www
  • ACRA 异常 只能使用低 16 位作为 requestCode

    我的应用程序使用 ACRA 进行错误报告 并且我的设备收到了一些错误报告 Can only use lower 16 bits for requestCode Google 显示使用 startActivityForResult 时发生此错
  • 如何从 Python 中的函数返回两个值?

    我想从两个单独的变量中的函数返回两个值 例如 def select choice loop 1 row 0 while loop 1 print Choose from the following options 1 Row 1 2 Row
  • NHibernate 警告并且数据未保存

    当我通过调用 SaveOrUpdate 进行保存时 收到此警告 并且在调用 Transaction Commit 后数据未保存在数据库中 NHibernate Engine ForeignKeys 无法 确定 项目名称 是否与 分配的标识符
  • Spark DataFrame 重新分区和 Parquet 分区

    我在列上使用重新分区来将数据存储在镶木地板中 但 我看到没有 parquet 分区文件的数量与 不 Rdd 分区 rdd分区之间是否没有相关性 和镶木地板隔断 当我将数据写入镶木地板分区并使用 Rdd 时 重新分区 然后我从 parquet
  • 带有 C# 内部访问修饰符的 Doxygen

    我正在使用 Doxygen 为我正在处理的 C 项目生成一些 API 文档 我在这个项目中有相当多的 内部 功能 并且不希望 Doxygen 在它生成的生成的 html 中生成这些签名 我已尝试启用 HIDE FRIEND COMPOUND
  • macOS 中的 UIGraphicsBeginImageContextWithOptions 模拟

    以下是我用来在 iOS 中缩放图像的代码 即将 500x500 图像缩放到 100x100 图像 然后存储缩放后的副本 UIImage image UIImage originalImage scaledToSize CGSize desi
  • NaN 作为字典中的键

    谁能向我解释以下行为 gt gt gt import numpy as np gt gt gt np nan 5 np nan 5 gt gt gt float64 np nan 5 float64 np nan KeyError nan
  • 切换到共享运行时后 Office 插件加载失败

    我跟着配置您的 Office 加载项以使用共享 JavaScript 运行时 https learn microsoft com en us office dev add ins develop configure your add in
  • 如何使用searchkick根据某些条件进行索引

    我正在使用searchkick 和rails4 我有一个活动记录 People 其属性为 a b c 如何仅当 b 等于 type1 时才建立索引 否则不建立索引 目前我所知道的是 def search data a a b b c c e
  • java等待光标显示问题

    我在应用程序中显示等待光标时遇到问题 只要鼠标位于定义其自身光标的面板上方 等待光标就不会出现 如果面板不改变光标 则会出现等待光标 我附上 SSCE 来准确解释我的问题 public class BusyCursorTest extend
  • VS 2017 中的 MySQL 和 MVC 实体框架无法正常工作

    我正在尝试启动 MVC EF Visual Studio 2017 项目 我在本地实例上使用 MySQL 设置了数据连接 但是当我创建 ADO net 数据模型时 出现图中所示的错误 这里还有另一篇文章 无法对实体框架 6 使用 MySQL
  • 对数据库的访问进行队列以避免多个缓存项

    我有一个与音乐相关的 ASP NET 网站 它在第一次请求时缓存数据库中的大量静态信息 有时 应用程序负载较重时会重置应用程序并清除缓存 然后所有 http 请求都会转到数据库以检索静态数据并将其缓存以供其他请求使用 如何确保只有一个请求进
  • 表达式树生成的 IL 是否经过优化?

    好吧 这只是好奇心 对现实世界没有帮助 我知道使用表达式树 您可以像常规 C 编译器一样即时生成 MSIL 由于编译器可以决定优化 我很想问在执行期间生成的 IL 的情况如何Expression Compile 基本上有两个问题 因为在编译
  • ResizeObserver 一 vs 多性能

    The 调整大小观察者 https wicg github io ResizeObserver has an 观察 https wicg github io ResizeObserver dom resizeobserver observe
  • 保留源 shell 脚本而不退出终端

    我正在编写一个 shell 脚本来保存一些击键并避免拼写错误 我想将脚本保留为单个文件 该文件调用内部方法 函数并在出现问题时终止函数without离开航站楼 my script sh bin bash exit if no git if
  • 为什么方法定义返回符号?

    当你定义一个方法时 它会返回一个与该方法同名的符号 这有道理吗 或者它只是作为您创建它的验证 Like so def something end gt something IRb always显示调用结果inspect计算的最后一个表达式的
  • StringBuilder容量()

    我注意到capacity方法返回StringBuilder没有逻辑的能力 方式 有时它的值等于字符串长度 有时它更大 有没有一个方程式可以知道它的逻辑是什么 我将尝试用一些例子来解释这一点 public class StringBuilde
  • 编译错误:“stddef.h:没有这样的文件或目录”

    每当我尝试编译此代码时 总是会出现以下错误 In file included from usr include wchar h 6 0 from usr lib gcc i686 pc cygwin 4 9 2 include c cwch
  • 在 Inno Setup 中将字符串编码为 Base64(Inno Setup 的 Unicode 版本)

    Problem 我尝试使用帕斯卡函数EncodeStringBase64 假设 Inno Setup 可以访问 Pascal 标准库 但它无法找到它并提供一个Unknown Identifier error https www freepa