Ruby中的字符串编码
我最近开始使用Ruby进行编码,对一些行为感到困惑 我正在使用2.2.3p173并显示以下内容: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
__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