C.O.
C.O.

Reputation: 2329

How to use UTF-8 encoded command in AppleScript's do shell script on OS X 10.4

I have a program that generates a shell script and runs it via apple script. My output is UTF-8 encoded and I can't change that. On OS X 10.6 and above that works fine. On OS X 10.4 (Tiger) my script fails as soon as the file names /paths I need to process contain diacritical marks like é,à,Ü etc. (I don't have a 10.5 to try with so I don't know about that one yet)

I assume that this is a problem with the locale.

do shell script "locale" 

gives me:

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

so I figured that starting my script with:

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

might help but it turn out that it still does not work.

What else can I do to make the utf-8 encoded shell script work on OS X 10.4 can I make UTF-8 work in some other way or can I convert it to the default character encoding the system uses?

EDIT:

It turned out that starting with the export statements I had thought of:

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

does answer my original question.

This works:

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

My problem turned out to be that I need to use osascript to be able to immediately return the shell to the process that spawns it like this:

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 & "

and no matter where I put the exports there it does not work with osascript...

Upvotes: 5

Views: 3108

Answers (2)

juanfal
juanfal

Reputation: 123

You have saved me from suicide… not for the many hours trying to use an automator Service script to process SublimeText and copying also with pbcopy… I tried it long time before. Nothing. I simply do now

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

Thanks!

Upvotes: 1

jackjr300
jackjr300

Reputation: 7191

No problem on OS X 10.5

The osascriptcommand on OS X 10.4 doesn't handle UTF-8 encoded text correctly when the string contain extended ASCII character.

Solution : Use the MacRoman encoding, osascript handle it without problem.

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 & "

Upvotes: 2

Related Questions