首页 > 解决方案 > 如何在 Ruby 中始终如一地获得 ASCII-8BIT 编码?

问题描述

Ruby 在处理编码方面似乎有点不一致:

irb -E BINARY:BINARY
irb(main):001:0> "hi".encoding
=> #<Encoding:ASCII-8BIT>

所以这“有效”。现在平原ruby呢?

ruby -E BINARY:BINARY -e 'p "hi".encoding'
#<Encoding:US-ASCII>

那是行不通的。此外,当p "hi".encoding放置在 中时x.rb, 的输出ruby -E BINARY:BINARY x.rb为:

#<Encoding:UTF-8>

ASCII-8BIT调用时如何获取文字ruby

标签: rubycharacter-encoding

解决方案


字符串文字具有与脚本编码相同的编码。而不是'hi'.encoding您可以使用关键字__ENCODING__来检索它。可以通过在脚本开头添加魔术注释来更改脚本编码:

# encoding: ASCII-8BIT

p __ENCODING__ # => #<Encoding:ASCII-8BIT>

-E标志ruby不影响字符串文字的编码。它仅用于更改外部和内部编码。Encoding您可以在文档中了解各种类型的编码及其用途。

回到字符串文字的编码:尽管irb声称它的-E标志是“与”相同,ruby -E但这是不正确的。它使用外部编码作为脚本编码。irb已经有几个限制。这可能是其中之一。这至少是一个文档错误。

除了魔术注释之外,还有另一种不鼓励的方式来设置脚本编码ruby-K标志和n(无)kcode。ruby -Kne "p __ENCODING__"应该打印#<Encoding:ASCII-8BIT>。但是-K也改变了外部编码。


推荐阅读