我有一个程序可以生成一个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 ...
答案 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`