通过电子邮件在AppleScript中创建RTF:如何处理邮件的编码?

时间:2015-09-16 09:23:24

标签: character-encoding applescript

我在OS X 10.10.5上运行的工作流程中有以下AppleScript:

on run {input, parameters}
  tell application "Mail"
    set _sel to get selection
    set _links to {}
    repeat with _msg in _sel
        set _messageURL to _msg's message id
        set _messageTitle to _msg's subject
    end repeat

    set cmd to "\"{\\rtf1\\ansi\\ansicpg1252\\cocoartf949\\cocoasubrtf270{\\fonttbl
        \\f0\\fswiss\\fcharset0 Helvetica;}{\\colortbl;\\red255\\green255\\blue255;}
        \\margl1440\\margr1440\\vieww9000\\viewh8400\\viewkind0\\pard\\tx720\\tx1440
        \\tx2160\\tx2880\\tx3600\\tx4320\\tx5040\\tx5760\\tx6480\\tx7200\\tx7920\\tx8640
        \\ql\\qnatural\\pardirnatural{\\field{\\*\\fldinst{HYPERLINK \"message:///%3c" & 
        _messageURL & "%3e\"}}{\\fldrslt\\f0\\fs28 \\cf0 \"" & _messageTitle & "\"}}}\""

    do shell script "/bin/bash -c 'echo " & cmd & " | pbcopy -Prefer rtf'"
  end tell
  return input
end run

该脚本能够创建一个邮件消息的RFT链接,我可以从其他地方的剪贴板复制。但是,当电子邮件的主题包含非ASCII字符时,脚本无法处理它们。例如,给出以下西班牙语主题(可以翻译为我将于2015年9月7日星期一在萨拉戈萨

Re: Estaré en zaragoza el lunes 7 sept 2015 

要粘贴的文字是:

Re: Estaré en zaragoza el lunes 7 sept 2015

我想我必须将_messageTitle的值编码为utf-8ansicpg1252,但我不确定这个猜测,我找不到发布此问题的帖子。< / p>

1 个答案:

答案 0 :(得分:1)

正如您猜测的那样,您需要转换输出。这是一个更复杂问题的简单示例:

on run
    set _messageTitle to "Résolu"

    set fullCommand to "/bin/bash -c 'echo " & _messageTitle & "'" & " | pbcopy"

    do shell script fullCommand
end run

在粘贴时,重音é搞砸了。

一种解决方案是运行echoiconv

的输出
on run
    set _messageTitle to "Résolu"

    set fullCommand to "/bin/bash -c 'echo " & _messageTitle & "'" & " | iconv -t MACROMAN -f UTF8-MAC | pbcopy"

    do shell script fullCommand
end run

在粘贴时,重音é被正确重音。

请注意,您可能需要使用不同的(-t)和(-f)编码,具体取决于您的具体情况。