【问题标题】:Wrong encoding when running a ruby script on Build Phases on Xcode在 Xcode 的 Build Phases 上运行 ruby​​ 脚本时编码错误
【发布时间】:2015-04-16 11:42:49
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: ruby xcode string run-script


    【解决方案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 Run Script。当 XCode 运行脚本时,你会得到不同的结果吗?

    要尝试的完全不同的项目是将运行脚本从 shell 更改为 Ruby,就像这样。

    首先弄清楚 Ruby 在哪里:

    $ command -v ruby
    

    我的是:

    /usr/bin/ruby
    

    然后从这里更改 XCode 运行脚本:

    /bin/sh ruby my_script.rb
    

    到这里:

    /usr/bin/ruby myscript.rb
    

    【讨论】:

    • 嘿@joelparkerhenderson!谢谢回复。这是两个生成的文件之间的差异。我可以意识到它只会改变符号 • 和 ' 292c292 “和平与爱,你们所有人。\n”; 248c248 "\n •\t 一些文字。";
    猜你喜欢
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 2017-02-05
    • 2017-03-28
    • 1970-01-01
    相关资源
    最近更新 更多