[Ruby]Encode编码

1. 获取编码

  • 用 String#encoding 方法可获取字符串的编码,用伪变量 _ENCODING_ 可获取当前运行脚本的编码

2. encode 和 force_encoding区别

  • encode假设当前编码是正确的,并尝试更改字符串,使其在第二次编码中以相同的方式读取
  • force_encoding设置给定的字符串编码,但不改变字符串本身,即不改变它在内存中的表示
  • force_encoding改变字符串从字节读取的方式,而encode改变字符串写入的方式而不改变输出(如果可能)
'łał'.bytes  #=> [197, 130, 97, 197, 130]
'łał'.force_encoding('UTF-16').bytes    #=>  [197, 130, 97, 197, 130]
'łał'.force_encoding('UTF-16')    #=>  "\xC5\x82\x61\xC5\x82"
'łał'.encode('UTF-16').bytes    #=> [254, 255, 1, 66, 0, 97, 1, 66]
'łał'.encode('UTF-16')    #=> "\uFEFF\u0142a\u0142"

3. 解析字符串

string = "R\xC3\xA9sum\xC3\xA9"
string.force_encoding('UTF-8')  #=> "Résumé"
string.encode('UTF-8')  #=> "Résumé"
require 'cgi'
CGI::unescape(string)  #=> "Résumé"
 

4. Encoding 类的方法

Encoding.default_external 返回默认的外部编码,这个值会影响 IO 类的外部编码
Encoding.default_internal 返回默认的内部编码,这个值会影响 IO 类的内部编码
Encoding.list Encoding.name_list 返回 Ruby 支持的编码一览表

p Encoding.list
 #=> [#<Encoding:ASCII-8BIT>, #<Encoding:UTF-8>, ...
p Encoding.name_list
 #=> ["ASCII-8BIT", "UTF-8", "US-ASCII", ...

Guess you like

Origin blog.csdn.net/qq_41037744/article/details/120530103