在AppleScript中使用curl接收错误的字符集以将其移交给macOS上的Outlook

在AppleScript中使用curl接收错误的字符集以将其移交给macOS上的Outlook,curl,encoding,outlook,applescript,Curl,Encoding,Outlook,Applescript,在构建AppleScript例程以在Microsoft Outlook中设置有关签名编码的签名时,我遇到了最后一个问题 这是AppleScript部分的基本部分(更像是检索URL、登录用户的信息等) 因此,我使用curl获取HTML签名的源代码(工作正常)。Web服务器会响应一个html文档,该文档在-元素中具有以下元标记。在浏览器中调用URL时,一切正常。甚至当我在Outlook on Windows中将其放入签名时。所以这里一切都应该很好 但问题是如何将其打包到Mac上的Outlook中 s

在构建AppleScript例程以在Microsoft Outlook中设置有关签名编码的签名时,我遇到了最后一个问题

这是AppleScript部分的基本部分(更像是检索URL、登录用户的信息等)

因此,我使用
curl
获取HTML签名的源代码(工作正常)。Web服务器会响应一个html文档,该文档在
-元素中具有以下元标记
。在浏览器中调用URL时,一切正常。甚至当我在Outlook on Windows中将其放入签名时。所以这里一切都应该很好

但问题是如何将其打包到Mac上的Outlook中

set signatureName to "My Signature"
set sourceUri to "http://my.domain.com/my-signature.htm"
set sourceCode to (do shell script "curl -L " & sourceUri)

tell application "Microsoft Outlook"
    delete every signature
    make new signature with properties {name:signatureName,content:sourceCode}
end tell
因此,Outlook中出现了签名,这意味着它也可以工作

然而,在编码过程中,某些东西似乎以某种方式断裂:

curl
命令以正确的编码检索源代码时(我直接在命令行上使用
curl
并将结果导入
iconv-f iso8859-1-t utf-8
),当到达AppleScript变量时,它似乎被弄乱了

我读到AppleScript现在在UTF16中内部工作,并作为UTF-8处理输入和输出的内容。所以我尝试了各种方法调用shell脚本来使用
iconv
等等。然而,没有任何结果

签名/html标记包含几个“特殊字符”,但我将给出一个仅包含一个字符的单词作为示例,以避免使其过于复杂:

我所期望的(在浏览器->ISO8859-1中运行良好)

当我刚刚执行上面的AppleScript代码段时,它会出现在Outlook中:

÷ffnungszeiten 
当我添加这样的内容时

set sourceCode to (do shell script "echo " & quoted form of sourceCode & " | iconv -c -f iso8859-1 -t utf-8")
set sourceCode to (do shell script "echo " & quoted form of sourceCode & " | sed 's/ISO-8859-1/UTF-8/g'")
--- second line is only to change the charset within the meta tag in the head section to match actual encoding with it
在尝试转换
源代码时,它会导致

÷ffnungszeiten 
展望未来。这些到达的字符看起来甚至不像我通常遇到的“正常”编码错误。我想这是一种“连锁混乱”

有没有人知道这里发生了什么,以及如何避免这种情况

编辑 在发布这篇文章之后,我刚刚尝试了一件事,这导致了一个工作结果:

我总是尝试通过两个/三个步骤进行转换,如:

set sourceCode to (do shell script "curl -L " & sourceUri)
set sourceCode to (do shell script "echo " & quoted form of sourceCode & " | iconv -c -f iso8859-1 -t utf-8")
set sourceCode to (do shell script "echo " & quoted form of sourceCode & " | sed 's/ISO-8859-1/UTF-8/g'")
现在,我只是通过管道对第一个调用进行了修改:

set sourceCode to (do shell script "curl -L " & sourceUri &  "| iconv -c -f iso8859-1 -t utf-8 | sed 's/ISO-8859-1/UTF-8/g'")

这将导致Outlook中出现预期的
Ö
-字符。然而,我有意使用ISO8859-1,因此我仍然对保留原始编码的解决方案感到好奇。

@Mockman是-我想我的手指不想碰到这个“v”。谢谢你的提示,我已经更正了。我认为我对字符编码的理解还不够透彻,无法确切地说出来,但我不明白这是怎么回事。不过这是个有趣的问题。
set sourceCode to (do shell script "curl -L " & sourceUri &  "| iconv -c -f iso8859-1 -t utf-8 | sed 's/ISO-8859-1/UTF-8/g'")