gpt4 book ai didi

Ruby 有时会打印 unicode 转义字符而不是字符本身。为什么?

转载 作者:行者123 更新时间:2023-12-04 14:30:54 27 4
gpt4 key购买 nike

我使用 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”字符串的数组?

最佳答案

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

根据文档,Array#to_s

Alias for: inspect

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

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

The default external encoding is used by default for strings created from the following locations:

  • CSV
  • File data read from disk
  • SDBM
  • StringIO
  • Zlib::GzipReader
  • Zlib::GzipWriter
  • String#inspect
  • Regexp#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=[\"Привет\"]"

关于Ruby 有时会打印 unicode 转义字符而不是字符本身。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34454084/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com