那些字符串本质上是一样的:右单引号是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 Run Script。当 XCode 运行脚本时,你会得到不同的结果吗?
要尝试的完全不同的项目是将运行脚本从 shell 更改为 Ruby,就像这样。
首先弄清楚 Ruby 在哪里:
$ command -v ruby
我的是:
/usr/bin/ruby
然后从这里更改 XCode 运行脚本:
/bin/sh ruby my_script.rb
到这里:
/usr/bin/ruby myscript.rb