3

シェル スクリプトを生成し、アップル スクリプトを介して実行するプログラムがあります。私の出力は 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 でエンコードされたシェル スクリプトを 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 を使用する必要があることであることが判明しました。

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 では問題ありません

OS X 10.4osascriptコマンドは、文字列に拡張 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 & "
于 2012-11-01T19:04:30.373 に答える