2015-02-16 4 views
1

У меня есть рубиновый скрипт, который читает yml-файл и создает на нем другой файл.Неверное кодирование при запуске рубинового скрипта на этапах сборки на Xcode

Если я выполняю его на своем терминале, выходной файл является идеальным.

Однако, когда Xcode работает на Build Phases>Run script, он меняется, например, с «Мы» на «Мы \ u2019re».

My Run Script выполняет /bin/sh ruby my_script.rb

Как я могу получить эту работу должным образом? Благодарю.

ответ

1

Эти строки по существу одинаковы: правый одиночный кавычек является символом Юникода 2019, который может быть представлен как \u2019.

Когда вы запускаете скрипт в своем терминале, ваш терминал отображает символ Unicode, который вы ожидаете увидеть. Вы можете проверить это, запустив этот пример в терминальной оболочке:

$ ruby -e 'puts "We\u2019re"' 
We’re 

Попробуйте выполнить команду на терминале и скопировать выходной файл в безопасном месте. Затем попробуйте запустить Xocde Run Script. Сравните эти два файла, например так:

$ diff output1.yaml output2.yaml && echo "The files are equal" 

Новая информация от оригинального плаката:

Вот разница между двумя сгенерированных файлов:

< " Peace and love, y\u2019all.\n" 
> " Peace and love, y’all.\n" 
< "\n \u2022\t Some text. " 
> "\n •\t Some text." 

Это выглядит для меня, как будто у вас проблема с кодировкой языка: кодировка языка, которую вы используете при запуске скрипта в вашем терминале, может отличаться от кодировки языка, используемой XCode (или/bin/sh).

Вы можете увидеть, что язык, кодирующий ваш терминал использует, запустив это:

$ env | grep '^LANG' 

Например, я использую UTF-8:

LANG=en_US.UTF-8 

Чтобы выяснить, что с помощью XCode, создать одна строка сценария, такие как my_test.sh так:

env | grep '^\(LANG\|LC_\)' 

Затем добавьте его в XCode Run Script , Получаете ли вы другой результат, когда XCode запускает скрипт?

Совершенно другой предмет, который нужно попробовать - это изменить сценарий запуска из оболочки в Ruby, как это.

Первая цифра, где Рубин:

$ command -v ruby 

Шахта:

/usr/bin/ruby 

Затем измените XCode Run Script из этого:

/bin/sh ruby my_script.rb 

Для этого:

/usr/bin/ruby myscript.rb 
+0

Эй, @joelparkerhenderson! Спасибо за ответ. Вот различие между двумя сгенерированными файлами. Я мог понять, что он меняет только символы • и « 292c292 <« Мир и любовь, y \ u2019all. \ N "; --- > «Мир и любовь, y'all. \ N»; 248c248 <"\ n \ u2022 \ t Некоторый текст."; --- > "\ n • \ t Некоторый текст."; –