首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在ruby中#encode和#force_encoding有什么不同?

在ruby中#encode和#force_encoding有什么不同?
EN

Stack Overflow用户
提问于 2014-02-07 05:17:43
回答 1查看 13.5K关注 0票数 33

我真的不明白Ruby语言中String类的#encode#force_encoding有什么不同。我知道"kam".force_encoding("UTF-8")会强制"kam"使用UTF8编码,但是#encode(encoding)有什么不同呢?

http://ruby-doc.org/core-2.0/String.html#method-i-encoding

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-07 05:38:59

差别是相当大的。force_encoding设置给定的字符串编码,但不更改字符串本身,即不更改其在内存中的表示:

'łał'.bytes #=> [197, 130, 97, 197, 130]
'łał'.force_encoding('ASCII').bytes #=> [197, 130, 97, 197, 130]
'łał'.force_encoding('ASCII')   #=> "\xC5\x82a\xC5\x82"

encode假设当前编码是正确的,并尝试更改字符串,使其在第二个编码中以相同的方式读取:

'łał'.encode('UTF-16') #=> 'łał'
'łał'.encode('UTF-16').bytes #=> [254, 255, 1, 65, 0, 97, 1, 66] 

简而言之,force_encoding更改了从字节读取字符串的方式,而encode更改了字符串的写入方式,而不更改输出(如果可能)

票数 40
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21614228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档