Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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
Ruby中的字符串编码_Ruby_Encoding - Fatal编程技术网

Ruby中的字符串编码

Ruby中的字符串编码,ruby,encoding,Ruby,Encoding,我最近开始使用Ruby进行编码,对一些行为感到困惑 我正在使用2.2.3p173并显示以下内容: __ENCODING__ #=> #<Encoding:UTF-8> Default encoding in 2.2.3 "my_string".encoding #=> #<Encoding:UTF-8> Object.to_s.encoding #=> #<Encoding:US-ASCII> Ob

我最近开始使用Ruby进行编码,对一些行为感到困惑

我正在使用2.2.3p173并显示以下内容:

__ENCODING__             #=> #<Encoding:UTF-8>  Default encoding in 2.2.3

"my_string".encoding     #=> #<Encoding:UTF-8>
Object.to_s.encoding     #=> #<Encoding:US-ASCII>
Object.new.to_s.encoding #=> #<Encoding:ASCII-8BIT>
String(123456).encoding #=> #<Encoding:ASCII-8BIT>
"123456".encoding       #=> #<Encoding:UTF-8>
\uuuuuuuuuuuuuuuuuuuuuuuu35;=>#2.2.3中的默认编码
“我的字符串”。编码=>#
Object.to#u.encoding#=>#
Object.new.to#u.encoding#=>#

编码不一致的原因是什么?

对象
在中定义 如果您尝试以下操作:

__ENCODING__             #=> #<Encoding:UTF-8>  Default encoding in 2.2.3

"my_string".encoding     #=> #<Encoding:UTF-8>
Object.to_s.encoding     #=> #<Encoding:US-ASCII>
Object.new.to_s.encoding #=> #<Encoding:ASCII-8BIT>
String(123456).encoding #=> #<Encoding:ASCII-8BIT>
"123456".encoding       #=> #<Encoding:UTF-8>
String(123456).编码#=>#
“123456”。编码#=>#
我没有在ruby源代码中挖掘太多,但它像是对
的编码(
rb\u usascii\u stru\u new2
)进行了harcoded(
rb\u usascii\u str\u new2
)很好的发现

简而言之,这是完全任意的,取决于Ruby如何在内部构建返回的字符串

有许多内部C函数,它们用US-ASCII编码构造空字符串或文字字符串:以及类似的代码。它们通常通过附加较小的字符串片段来构造字符串。几乎所有的
to_s
方法都会这样做:

[].to_s.encoding
#<Encoding:US-ASCII>
{}.to_s.encoding
#<Encoding:US-ASCII>
$/.to_s.encoding
#<Encoding:US-ASCII>
1.to_s.encoding
#<Encoding:US-ASCII>
true.to_s.encoding
#<Encoding:US-ASCII>
Object.to_s.encoding
#<Encoding:US-ASCII>
对于由脚本定义的字符串,这些字符串按照您的预期获得默认编码UTF-8