我有一个 ruby 脚本,它读取一个 yml 文件并基于它创建另一个文件。
如果我在终端上执行它,输出文件是完美的。
但是,当 Xcode 在Build Phases
>上运行时Run script
,它会从“We're”变为“We\u2019re”。
我的运行脚本正在执行/bin/sh ruby my_script.rb
我怎样才能让它正常工作?谢谢。
我有一个 ruby 脚本,它读取一个 yml 文件并基于它创建另一个文件。
如果我在终端上执行它,输出文件是完美的。
但是,当 Xcode 在Build Phases
>上运行时Run script
,它会从“We're”变为“We\u2019re”。
我的运行脚本正在执行/bin/sh ruby my_script.rb
我怎样才能让它正常工作?谢谢。
这些字符串基本相同:右单引号是 Unicode 字符 2019,可以表示为\u2019
.
当您在终端中运行脚本时,您的终端就是您希望看到的显示 Unicode 字符。您可以通过在终端 shell 中运行此示例来验证这一点:
$ ruby -e 'puts "We\u2019re"'
We’re
尝试在终端上运行命令并将输出文件复制到安全的地方。然后尝试运行 Xocde 运行脚本。比较这两个文件,例如这样:
$ 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 运行脚本。当 XCode 运行脚本时,你会得到不同的结果吗?
一个完全不同的尝试是将运行脚本从 shell 更改为 Ruby,就像这样。
首先弄清楚Ruby在哪里:
$ command -v ruby
我的是:
/usr/bin/ruby
然后从这里更改 XCode 运行脚本:
/bin/sh ruby my_script.rb
对此:
/usr/bin/ruby myscript.rb