UTF-8是Ruby v.2中的默认编码吗?
Matz在他的书中写道,为了使用UTF-8,必须在脚本的第一行添加编码注释。他给我们举了一个例子:UTF-8是Ruby v.2中的默认编码吗?,ruby,encoding,Ruby,Encoding,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 chara
# -*- 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"]
“×”.编码
=> #
“×”.bytes.to_a.map{dec | dec.to_s(16)}
=>[“c3”,“97”]
所以看起来utf-8是默认编码。这是Ruby 2最近添加的吗?他的例子来自Ruby 1.9。是的。UTF-8是默认编码,这一事实只是从Ruby 2开始的
如果您知道他的示例来自Ruby 1.9,那么请检查Ruby新版本中新增的功能。没那么多。有趣的是,他说:“字符串文字的编码基于其出现的文件的源编码。但是它的编码并不总是与源编码相同。如果字符串文字仅包含7位ASCII字符,则其编码方法将返回ASCII,即使源编码为UTF-8”。这也不再正确:2.2.0:033>?H.encoding=>#“a”。encoding=>#奇怪,但:
$ruby-v
ruby 2.0.0p648(2015-12-16修订版53162)[universal.x86\u 64-darwin16]
$ruby-e“p/asd/.encoding”