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