[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é"
require 'iconv'
Iconv.iconv('utf-8', 'gbk', string)[0]   #转成utf-8
如果知道原编码为gbk,则 string.force_encoding('gbk').encode('utf-8')
  • windows默认中文编码为gbk, 传到linux的文件会乱码,可以用linux的convmv修改文件名
# -f 原编码, -t 目标编码, --notest 执行转换, 否则是预览
convmv -f gbk -t utf-8 /files/*.pdf --notest
system('convmv -f gbk -t utf-8 /files/*.pdf --notest') # ruby中使用

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", ...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值