1

我有一个 ruby​​ 脚本,它读取一个 yml 文件并基于它创建另一个文件。

如果我在终端上执行它,输出文件是完美的。

但是,当 Xcode 在Build Phases>上运行时Run script,它会从“We're”变为“We\u2019re”。

我的运行脚本正在执行/bin/sh ruby my_script.rb

我怎样才能让它正常工作?谢谢。

4

1 回答 1

1

这些字符串基本相同:右单引号是 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
于 2015-02-16T08:18:57.897 回答