Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
UTF-8是Ruby v.2中的默认编码吗?_Ruby_Encoding - Fatal编程技术网

UTF-8是Ruby v.2中的默认编码吗?

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

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"] 
“×”.编码
=> # 
“×”.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”