是否可以检查Ruby是否存在/已安装给定的字符集。
例如:
check('utf-8')
- >真。
check('utf-88')
- >假
答案 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? }