3

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

4

2 回答 2

2

在OS X 10.5上没问题

当字符串包含扩展的 ASCII 字符时, OS X 10.4上的osascript命令无法正确处理 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 & "
于 2012-11-01T19:04:30.373 回答
1

你让我免于自杀……不是在尝试使用自动化服务脚本处理 SublimeText 并使用 pbcopy 复制的数小时内……我很久以前就尝试过。没有。我现在就做

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

谢谢!

于 2020-12-01T17:07:18.570 回答