AppleScript错误:在剪贴板上放置纯文本时,该文本始终会转换为富文本


2

运行以下代码在剪贴板上放置一些文本:

set testString to "This string should be plain text."
set the clipboard to testString

如果您在TextEdit.app中打开一个新的.rtf文件,并将剪贴板粘贴到此文档中,您将发现剪贴板包含富文本格式。具体来说,剪贴板上的文本具有font Helvetica和size 12

我也尝试指定set the clipboard to (testString as string)set the clipboard to (testString as text)。但是,代码始终将富文本格式放置在剪贴板上。这种富文本始终具有相同的样式(如上一段所述)。

是否可以在AppleScript中以纯文本形式将文本放在剪贴板上?


OS X El Capitan,版本10.11.6。


Answers:


2

也许使用Cocoa-AppleScript将文本复制到粘贴板将仅设置纯文本以粘贴到RTF文档。

否则,请使用以下解决方法:

set testString to "This string should be plain text." as string
do shell script "pbcopy <<<" & quoted form of testString

前面提到的解决方法将“ linefeedafter” 添加testString到剪贴板,如果这是不必要的行为,请使用:

set testString to "This string should be plain text." as string
do shell script "printf " & the quoted form of testString & " | pbcopy"

另一种选择是使用粘贴和匹配样式⌥⇧⌘V而不是粘贴⌘V来匹配插入点的内容。


我可以确认您的代码确实实现了将字符串粘贴为纯文本的预期结果。但是,这两个代码示例都揭示了一个新的AppleScript错误:如果testString包含破折号(-)或破折号(-),则这些破折号字符将转换为mojibake。关于您的最终建议,“粘贴和匹配样式”的问题是此命令未编写到所有应用程序中。
Rubik球面

有趣的是,我发现的这个Stack Overflow答案(引用了我在原始帖子中描述的确切错误)从同一角度解决了该问题。
rubik的球面,2013年

@rubik的领域,您说过:“关于您的最终建议,“粘贴和匹配样式”的问题是此命令并未编写到所有应用程序中。”,我提到了⌥⇧⌘V,因为您在OP中说过TextEdit,所以我假设您使用的是TextEdit。就是说,尽管可以将其称为“ 粘贴无格式文本”或类似内容,但许多应用程序确实具有⌥⇧⌘V,并且许多应用程序也具有“ 特殊粘贴” ... V也可以处理此问题。是的,不是所有的应用程序都可能具有全部或全部,但是,如果使用Cocoa-AppleScript无法解决问题,则必须使用已有的软件。
user3439894

@rubik的范围,BTW,EM DASH和EN DASH不是ASCII(纯文本)文本,部分原因可能是您获得mojibake的原因。就是说,正如您所发现的那样,AppleScript有很多错误,这毫无疑问,尤其是因为其他应用程序中的类似类型操作按预期工作,而不像AppleScript可以并确实处理某些事情。如果找不到与AppleScript配合使用的修复程序/变通办法,则必须使用其他语言/方法来实现目标。另一种选择是仅手动纠正偶尔出现的mojibake。那有什么大不了的?
user3439894

1.在“⌥⇧⌘V”点上,我仅在OP中提到了TextEdit,因为这是我得出结论,AppleScript设置的剪贴板包含富文本。这是我的问题:“是否可以在AppleScript中以纯文本形式将文本放在剪贴板上?” 有问题的脚本不会粘贴或击键文本。该脚本仅将文本放置在剪贴板上(供用户将其粘贴到所需的任何位置)。2.不,破折号/破折号错误没什么大不了的。您的解决方案满足了我的需求。我将实现您的代码,并添加一条replace_chars语句来解决此错误。
魔球的范围

0

这应该工作:

set the clipboard to string of (the clipboard as record)

实际上,您可以使用try语句对它进行安全验证:

try
  set the clipboard to string of (the clipboard as record)
on error errMsg
  display dialog errMsg
end try

我测试了您的代码,但仍将富文本格式放置在剪贴板上。此解决方案在您的环境中是否正常工作?
Rubik球面

0

看起来不管您做什么,如果在文本编辑首选项的“新文档”选项卡中选择了纯文本,剪贴板将粘贴纯文本。但是,如果启用了富文本格式,则似乎所有内容都将被粘贴为RTF文档中的富文本格式。

在此处输入图片说明

在此处输入图片说明

我还尝试在RTF文档中选择文本,并尝试在格式菜单中转换为纯文本。如果我选择格式化文本,则会弹出一个对话框,提示将文档从RTF转换为纯文本。


请尝试以下操作以见证我正在谈论的问题:在TextEdit中创建一个.rtf文档。然后,以Helvetica以外的其他字体键入文本,并以12以外的其他任何大小键入文本。现在,粘贴剪贴板(其文本由AppleScript代码设置)。您会发现该文本的字体已更改为Helvetica,并且大小已更改为12。这意味着剪贴板上的文本为富文本格式。唯一字体数据和唯一大小数据包含在剪贴板上。
魔球的范围
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.