AppleScript не может правильно отображать символы CJK из переменных среды

AppleScript без проблем справляется с символами UTF-8 внутри скрипта. Но он не может правильно получить символы UTF-8 из переменных среды.

osascript -e 'do shell script "echo " &"你好"'

你好

HELLO=你好 osascript -e 'do shell script "echo "& (system attribute "HELLO")'

你好

Любые предложения, чтобы исправить это?


person Meow    schedule 27.04.2018    source источник


Ответы (1)


Похоже, что system attribute не уважает среду оболочки LANG. Эх, они оба древние и противные.

Это даст вам правильное значение:

HELLO=你好 osascript -e 'do shell script "echo \"$HELLO\""'
# 你好

В качестве альтернативы используйте NSUserDefaults через мост AppleScript-ObjC. Несколько лет назад я написал кучу библиотек AppleScript; Команда environment variables библиотеки File использует этот подход.

person foo    schedule 28.04.2018
comment
Это довольно ограничено в использовании, поскольку работает только при извлечении символов UTF8 из переменных среды, если используется с do shell script. Рассмотрим следующие работы при использовании system attribute; например HELLO=foo osascript -e 'tell app "Finder" to display dialog system attribute "HELLO"'. Однако это не работает при использовании UTF8; например HELLO=你好 osascript -e 'tell app "Finder" to display dialog system attribute "HELLO"' (т. е. в диалоговом окне отображается ‰Ω†Â•Ω). Итак, согласно этому ответу, следующее не работает: HELLO=你好 osascript -e 'tell app "Finder" to display dialog \"$HELLO\"' - person RobC; 29.04.2018
comment
Однако вы можете установить результат echo в do shell script в переменную AppleScript, прежде чем использовать ее в другом месте в последующих командах osascript. Например, следующее правильно отображает 你好 в диалоговом окне: HELLO=你好 osascript -e 'set envVar to do shell script "echo \"$HELLO\""' -e 'tell app "Finder" to display dialog envVar' - person RobC; 30.04.2018