【问题标题】:Ruby sometimes prints unicode-escaped chars instead of the chars themselves. Why?Ruby 有时会打印转义字符而不是字符本身。为什么?
【发布时间】:2016-03-30 23:23:56
【问题描述】:

我使用 ruby​​ 2.2.3p173 和 Sublime 3。我所有的字符串都已经在 encode('utf-8') 上。在 Linux 中,我有我所期望的。尝试制作输出:

a = [ "Привет" ]
puts "puts=#{a}"
p "p=#{a}"
print "print=#{a}\n"

puts a[ 0 ]
p a[ 0 ]
print a[ 0 ] + "\n"
p a[ 0 ].encoding
p __ENCODING__

输出是:

puts=["\u041F\u0440\u0438\u0432\u0435\u0442"]
"p=[\"\\u041F\\u0440\\u0438\\u0432\\u0435\\u0442\"]"
print=["\u041F\u0440\u0438\u0432\u0435\u0442"]
Привет
"\u041F\u0440\u0438\u0432\u0435\u0442"
Привет
#<Encoding:UTF-8>
#<Encoding:UTF-8>

我希望:

puts=["Привет"]
"p=[\"Привет\"]"
print=["Привет"]
Привет
"Привет"
Привет

如何在一行中打印包含多个“utf-8”字符串的数组?

【问题讨论】:

    标签: ruby puts


    【解决方案1】:

    这在 Windows 上尤为明显。在其他 *nix 系统上,它可能工作正常 - 例如,在 https://repl.it/ 上,您会看到正确的输出,因为它很可能托管在 *nix 系统上。

    根据文档,Array#to_s

    别名:inspect

    Array#inspect在每个数组成员上调用inspect,在这种情况下,数组成员都是字符串,因此String#inspect会被调用。

    String#inspect 使用Encoding#default_external as specified in documentation 获取检查结果。

    默认外部编码用于创建的字符串 从以下位置:

    • CSV
    • 从磁盘读取文件数据
    • SDBM
    • 字符串IO
    • Zlib::GzipReader
    • Zlib::GzipWriter
    • 字符串#inspect
    • 正则表达式#inspect

    在 Windows 上,默认外部编码不是 UTF-8,因此,我们在 String#inspect 的输出中看到转义序列。

    p Encoding::default_external
    #=> #<Encoding:IBM437>
    

    我们将默认的外部编码改为UTF-8,输出正常:

    Encoding::default_external = Encoding::UTF_8
    
    a = [ "Привет" ]
    puts "puts=#{a}"
    #=> puts=["Привет"]
    
    p "p=#{a}"
    #=> "p=[\"Привет\"]"
    

    【讨论】:

    • 不,它没有解释这一点。我看到了他的预期输出,包括putsp。一定是他的环境有问题,而不是他的红宝石。
    • 我看到了 OP 看到的输出,我使用纯 .rb 文件进行测试并使用 ruby file.rb 运行
    • 当然,我在 osx 上试过。但我认为这仍然不是 ruby​​ 的错
    【解决方案2】:

    试试 irb consolerails console

    应该可以了。

    注意:Kindly check also difference between p and puts

    希望这个答案对你有帮助!!!

    【讨论】:

      猜你喜欢
      • 2015-08-26
      • 2013-04-11
      • 2016-07-11
      • 2022-11-13
      • 2013-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多