【问题标题】:Is UTF-8 the default encoding in Ruby v.2?UTF-8 是 Ruby v.2 中的默认编码吗?
【发布时间】:2015-04-08 01:32:18
【问题描述】:

Matz 在他的书中写道,为了使用 UTF-8,您必须在脚本的第一行添加编码注释。他给我们举了一个例子:

# -*- coding: utf-8 -*-   # Specify Unicode UTF-8 characters

# This is a string literal containing a multibyte multiplication character
s = "2x2=4"

# The string contains 6 bytes which encode 5 characters
s.length        # => 5: Characters:  '2'   'x'   '2'   '='   '4'
s.bytesize      # => 6: Bytes (hex): 32   c3 97  32    3d    34 

当他调用bytesize 时,它返回6,因为乘法符号× 在ascii 集之外,必须用两个字节的unicode 表示。

我尝试了这个练习,没有指定编码注释,它把乘法符号识别为两个字节:

'×'.encoding
 => #<Encoding:UTF-8> 
'×'.bytes.to_a.map {|dec| dec.to_s(16) }
 => ["c3", "97"] 

所以看来 utf-8 是默认编码。这是最近添加到 Ruby 2 的吗?他的例子来自 Ruby 1.9。

【问题讨论】:

    标签: ruby encoding


    【解决方案1】:

    是的。 UTF-8 是默认编码的事实是从 Ruby 2 开始的。

    如果您知道他的示例来自 Ruby 1.9,请检查新版本 Ruby 中新增的功能。没那么多。

    【讨论】:

    • 有趣的是他说:“字符串文字的编码是基于它出现在其中的文件的源编码。但它的编码并不总是与源编码相同。如果一个字符串文字只包含 7 位 ASCII 字符,那么它的编码方法将返回 ASCII,即使源编码是 UTF-8"。这也不再正确: 2.2.0 :033 > ?H.encoding => # 'a'.encoding => #
    • 奇怪但是:$ ruby -vruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin16]$ ruby -e "p /asd/.encoding"#&lt;Encoding:US-ASCII&gt;
    猜你喜欢
    • 2014-04-23
    • 2013-04-28
    • 2016-08-06
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 2012-02-01
    • 2014-02-20
    相关资源
    最近更新 更多