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