如何在Apple X的OS X 10.4上执行shell脚本中使用UTF-8编码命令

时间:2012-11-01 12:58:24

标签: macos shell applescript

我有一个程序可以生成一个shell脚本并通过苹果脚本运行它。我的输出是UTF-8编码,我不能改变它。在OS X 10.6及更高版本上工作正常。在OS X 10.4(Tiger)上,一旦我需要处理的文件名/路径包含é,à,Ü等变音标记,我的脚本就会失败。(我没有10.5尝试,所以我不知道关于那个呢)

我认为这是区域设置的问题。

do shell script "locale" 

给了我:

"LANG=
LC_COLLATE=\"C\"
LC_CTYPE=\"C\"
LC_MESSAGES=\"C\"
LC_MONETARY=\"C\"
LC_NUMERIC=\"C\"
LC_TIME=\"C\"
LC_ALL="

所以我想通过以下方式启动我的脚本:

export LC_ALL=en_US.UTF-8;
export LANG=en_US.UTF-8;

可能会有所帮助,但事实证明它仍无效。

我还能做些什么来使utf-8编码的shell脚本在OS X 10.4上运行 我可以以其他方式使UTF-8工作,还是可以将其转换为系统使用的默认字符编码?

修改

事实证明,从我想到的导出语句开始:

export LC_ALL=en_US.UTF-8;
export LANG=en_US.UTF-8;

确实回答了我原来的问题。

这有效:

do shell script " export LC_ALL=en_US.UTF-8; export LANG=en_US.UTF-8; touch /ü"

我的问题结果是我需要使用osascript才能立即将shell返回到生成它的进程:

set myScriptAsString to "do shell script \" export LC_ALL=en_US.UTF-8; export LANG=en_US.UTF-8; touch /ü\""
do shell script "export LC_ALL=en_US.UTF-8; export LANG=en_US.UTF-8; osascript -e " & quoted form of myScriptAsString & " > /dev/null 2> /dev/null & "

无论我把导出放在哪里,它都不适用于osascript ...

2 个答案:

答案 0 :(得分:1)

OS X 10.5

没问题

OS X 10.4 上的osascript命令在字符串包含扩展ASCII字符时无法正确处理UTF-8编码文本。

解决方案:使用MacRoman编码,osascript可以毫无问题地处理它。

set myScriptAsString to quoted form of "do shell script \"touch /ü\""
do shell script "tString=$(echo " & myScriptAsString & "| iconv -t MACROMAN -f UTF8-MAC); osascript -e \"$tString\" > /dev/null 2> /dev/null & "

答案 1 :(得分:0)

您已经使我免于自杀...没几个小时试图使用自动服务脚本来处理SublimeText并使用pbcopy复制...我很久以前就尝试过。没有。我现在就做

`echo '#{s.sub(/\s+$/, '')}'  | iconv -t MACROMAN -f UTF8-MAC  | pbcopy`

谢谢!