检测ruby中是否存在charset

时间:2016-10-19 11:01:23

标签: ruby character-encoding

是否可以检查Ruby是否存在/已安装给定的字符集。

例如:

check('utf-8') - >真。

check('utf-88') - >假

1 个答案:

答案 0 :(得分:2)

这可以通过Encoding.find来实现。但是,如果编码不存在,则会引发参数异常:

Encoding.find('utf-8') # => #<Encoding:UTF-8>
Encoding.find('utf-88') # => ArgumentError: unknown encoding name - utf-88

一个简单的解决方法是拯救例外:

Encoding.find('utf-8') rescue nil # => #<Encoding:UTF-8>
Encoding.find('utf-88') rescue nil # => nil

或者,如果您不想处理异常,可以使用Encoding.name_list

Encoding.name_list.include?('UTF-8') => true
Encoding.name_list.include?('UTF-88') => false

然而,这种方法也存在缺点,因为查询的编码现在区分大小写 - 例如:

Encoding.name_list.include?('utf-8') => false

如果这有问题,您可以使用不区分大小写的比较,例如:

Encoding.name_list.any?{ |encoding| encoding.casecmp('utf-8').zero? }