Perl 如何在Apple脚本中将十六进制代码解码为正则文本

Perl 如何在Apple脚本中将十六进制代码解码为正则文本,perl,text,applescript,decode,encode,Perl,Text,Applescript,Decode,Encode,我正在使用Mac电脑上的todo list应用程序,当我将指向任务的链接复制到剪贴板时,它最终在剪贴板中编码为十六进制代码。当我把它粘贴到一个文本文件中时没有问题——它会显示为解码文本 但是,我需要在AppleScript中使用剪贴板内容,并且在那里很难将其解码为纯文本 我尝试了多个子例程,但它们在我的情况下不起作用。我在网上找到的大多数例子都涉及简单的编码URL。到目前为止,我使用的代码可以将例如“0348”正确地解码为数字1000,但是我的脚本无法解码编码的东西链接(顶部的那一长行数字) 谁

我正在使用Mac电脑上的todo list应用程序,当我将指向任务的链接复制到剪贴板时,它最终在剪贴板中编码为十六进制代码。当我把它粘贴到一个文本文件中时没有问题——它会显示为解码文本

但是,我需要在AppleScript中使用剪贴板内容,并且在那里很难将其解码为纯文本

我尝试了多个子例程,但它们在我的情况下不起作用。我在网上找到的大多数例子都涉及简单的编码URL。到目前为止,我使用的代码可以将例如“0348”正确地解码为数字1000,但是我的脚本无法解码编码的东西链接(顶部的那一长行数字)

谁能帮帮我吗

以下是我目前掌握的情况:

-- The link to a task in THINGS, encoded: 7468696e67733a2f2f2f73686f773f69643d41463645303746462d394230462d343539332d423143332d313846303337434237363836
-- Above link to the task in THINGS, unencoded: things:///show?id=AF6E07FF-9B0F-4593-B1C3-18F037CB7686
-- Online converter: http://www.unit-conversion.info/texttools/hexadecimal/
-- Number 1000 encoded: 03E8

set theEncodedText to "03E8"
set theDecodedText to (do shell script "perl -e 'printf(hex(\"" & theEncodedText & "\"))'") as string

set theDisplayedText to theDecodedText
display dialog theDisplayedText
谢谢,, Martin

下面的示例AppleScript代码是我如何处理变量设置的一个概念证明,该变量是作为
«数据URL…»
保存到剪贴板的一个东西URL链接,其中
..
是十六进制数据

此脚本将
«数据url…»
写入临时文件,读取临时文件(现在是
«数据url…»
的文本字符串),并将其设置为变量值,然后删除临时文件。然后,它会将Things URL链接显示为文本字符串,或者显示剪贴板中不包含“URL”的消息things:///show?id='URL链接

示例AppleScript代码:



注意:示例AppleScript代码就是这样,没有使用任何其他错误处理,只是为了显示完成任务的多种方法之一。用户始终有责任根据需要/需要添加/使用适当的错误处理

永远不要生成这样的代码。使用env vars或其他方法将参数作为参数传递给程序。感谢您的教程!–另一方面,我从Things应用程序的开发人员那里得到了回复,他们说他们将在Things v3.5的下一次更新中让“Copy link”命令以纯文本形式复制链接,而不是像现在这样将十六进制代码放入剪贴板。@iLoveCode我尝试了这个对您发布的问题的答案,它成功了,因此,它至少为您提供了一个临时解决方案,供您使用,直到更新出来。我不能代表您发言,但看起来用户3439894已经成功地回答了您的问题,并且没有其他竞争性的回答。我也不能代表用户3439894说话,但我认为选择他/她的答案将是一种很好的感谢方式,另外,它还可以帮助其他有类似问题的用户在这里找到可行的解决方案。不过,关于事物更新的好消息。
if ((clipboard info) as string) contains "URL" then

    set thingsURL to "/tmp/thingsURL.tmp"

    try
        set f to open for access thingsURL with write permission
        set eof f to 0
        write (the clipboard) to f
        close access f
    on error
        close access f
    end try

    set thingsURLtext to (read thingsURL)
    tell application "System Events" to delete file thingsURL

    display dialog thingsURLtext buttons {"OK"} default button 1

else

    display dialog "The clipboard did not contain a 'things:///show?id=' URL link." buttons {"OK"} default button 1

end if