通过 do shell 脚本删除 unicode 字符时出现问题,错误 <text> 编号 1

Problem when removing unicode characters via do shell script, Error <text> number 1

我想通过删除 unicode 字符来简化一段文本。当我在 bash 中 运行 时它工作正常,但是当我在 AppleScript 中 运行 它时我得到一个奇怪的错误。

set mytext to "SomeApp™ on the App Store"
log (do shell script "echo '" & mytext & "' | /usr/bin/iconv -c -s -f utf-8 -t ascii")

回复是:

tell current application
do shell script "echo 'SomeApp™ on the App Store' | /usr/bin/iconv -c -s -f utf-8 -t ascii"
    --> error "SomeApp on the AppStore" number 1
Result:
error "SomeApp on the AppStore" number 1

看起来,虽然 -c -s 选项可以防止 iconv 由于不可翻译的字符而打印错误,但它仍然会以错误状态(具体来说,状态为 1)退出; AppleScript 正在检测并报告它(这是其消息的“数字 1”部分)。这是 shell:

中相同效果的示例
$ echo "SomeApp™ on the App Store" | /usr/bin/iconv -c -s -f utf-8 -t ascii || echo "There was an error, status = $?"
SomeApp on the App Store
There was an error, status = 1

您可以通过将 || true 添加到 shell 命令来抑制这种情况,这将使整个命令成功,即使 iconv“失败”。不幸的是,它还会阻止 AppleScript 检测到其他真正的错误;我不知道解决这个问题的方法。

我还建议使用 quoted form of 而不是手动在字符串周围添加引号(如果字符串包含 ASCII 撇号,这将完全失败)。像这样:

set mytext to "SomeApp™ on the App Store"
log (do shell script "echo " & (quoted form of mytext) & " | /usr/bin/iconv -c -s -f utf-8 -t ascii || true")