ruby - 如何在 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
?
解决方案
字符串文字具有与脚本编码相同的编码。而不是'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
也改变了外部编码。
推荐阅读
- oracle - 使用 %found 和 %notfound
- java - 为什么 Locale(String) 构造函数在 Java 中不能正常工作?
- android - 无法获取未知属性“navigationVersion”
- ios - iOS TextField - 自动完成添加空白字符
- java - 如何将依赖项注入 Spark main 方法?
- regex - 如何使用 QRegExp 和 QString 获取图像标签的 src
- collision-detection - 立方体内任意光线的出射点
- sql - SQL VBA 查询将只返回小数据集的结果
- python - 给定一个长度为 x 的列表,重复它以获得长度为 n 的列表
- codeception - AspectMock 没有模拟类的构造函数