我真的不明白Ruby语言中String
类的#encode
和#force_encoding
有什么不同。我知道"kam".force_encoding("UTF-8")
会强制"kam"
使用UTF8编码,但是#encode(encoding)
有什么不同呢?
发布于 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
更改了字符串的写入方式,而不更改输出(如果可能)
https://stackoverflow.com/questions/21614228
复制相似问题