【问题标题】:Creating RTF in AppleScript from emails: How to deal with the encoding of mails?从电子邮件在 AppleScript 中创建 RTF:如何处理邮件的编码?
【发布时间】:2015-09-18 00:38:54
【问题描述】:

我在 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 字符时,脚本将无法处理它们。例如,给定以下西班牙语主题(可以翻译为I'll be in Zaragoza on Monday, 7th, sept 2015

Re: Estaré en zaragoza el lunes 7 sept 2015 

要粘贴的文字是:

Re: Estaré en zaragoza el lunes 7 sept 2015

我想我必须将_messageTitle 的值编码为从utf-8ansicpg1252,但我不确定这个猜测,我还没有找到处理这个问题的帖子。

【问题讨论】:

    标签: character-encoding applescript


    【解决方案1】:

    如您所料,您需要转换输出。这是一个重复您的问题的简单示例:

    on run
        set _messageTitle to "Résolu"
    
        set fullCommand to "/bin/bash -c 'echo " & _messageTitle & "'" & " | pbcopy"
    
        do shell script fullCommand
    end run
    

    粘贴时,重音 é 被弄乱了。

    一种解决方案是通过iconv 运行echo 的输出:

    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) 和 from (-f) 的编码。

    【讨论】:

    • 我发现更好的解决方案是使用iconv -f UTF-8 -t ASCII//TRANSLIT,因此ó 被转换为'o。我认为问题也可能出在 RTF 代码和/或do shell script 如何处理字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 2020-06-03
    • 2020-04-22
    • 1970-01-01
    相关资源
    最近更新 更多