You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AppleScript中如何正确编写及执行iconv相关shell命令?

解决AppleScript中iconv相关的两个问题

1. 正确编写do shell script "echo | iconv"

这个命令本身语法是合法的,但没有实际转换作用——因为echo默认输出空行(或仅换行),且iconv未指定源编码(-f)和目标编码(-t),它会按系统默认编码处理输入,最终输出和输入一致的内容。

如果想用来做编码转换测试,需要补充iconv的必要参数。比如将UTF-8文本转换为UTF-16BE:

do shell script "echo 'Hello World' | iconv -f utf-8 -t utf-16be"

要是只是验证do shell script调用iconv的基本逻辑,原命令可以直接运行,但要清楚它不会产生有意义的转换结果。

2. 修复echo -ne '\\x00\\x20' | iconv -f utf-16be的错误

你遇到的报错核心原因是:AppleScript的do shell script默认使用POSIX标准的sh shell,而非bash,sh里的echo不支持-n(不输出换行)和-e(解析转义序列)选项。这导致echo -ne '\\x00\\x20'并没有输出你期望的0x00和0x20字节,反而把-ne当成普通字符串输出,再加上未被解析的\x00\x20字符,最终输入给iconv的内容不是有效的UTF-16BE编码(UTF-16BE要求每个字符占2字节,错误输入的字节序列不完整)。

解决办法是用printf代替echo——printf是POSIX标准命令,在所有兼容shell中都支持转义序列,行为更可靠。正确的命令写法如下:

# 让iconv解析UTF-16BE字节(输出默认编码结果)
do shell script "printf '\\x00\\x20' | iconv -f utf-16be"

# 转换为指定编码(比如UTF-8),加上-t参数
do shell script "printf '\\x00\\x20' | iconv -f utf-16be -t utf-8"

printf '\\x00\\x20'会准确输出0x00和0x20两个字节,这正好是UTF-16BE编码的空格字符,iconv可以正确解析,不会再报“不完整字符”的错误。

内容的提问来源于stack exchange,提问作者NFDream

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:26:25