Unicode in Ruby
Author: KDr2
6
Feb
Ruby的Unicode支持确实是一个问题,尽管$KCODE=’u'可以解决一些字符串打印之类的问题,但是进行Unicode字符串的截取之类稍微复杂点操作就不行了,以前我的办法是,不论什么编码,先用iconv转换成UTF-16,之后截取,再转换回来,能在一定范围内解决一些小问题,现在activerecord (>=1.15.1)提供了 ActiveSupport::Multibyte::Chars类,很好的解决了Unicode的问题,下面是ActiveSupport::Multibyte::Chars用法的一点小例子:
- require "rubygems"
- require_gem "activesupport"
- require "active_support"
- $KCODE='u'
- s="中文测试"
- us=s.chars
- # => #<ActiveSupport::Multibyte::Chars:0xb79eb148 @string="中文测试">
- s.size
- #=>12
- us.size
- #=> 4
- us.class
- #=> ActiveSupport::Multibyte::Chars
- us.string
- #=> "中文测试"
- us[0]
- #=> 20013
- us[0..0]
- #=> #<ActiveSupport::Multibyte::Chars:0xb79de0d8 @string="中">
- us[0..2]
- #=> #<ActiveSupport::Multibyte::Chars:0xb79e0fa4 @string="中文测">
- us.methods.sort
- #=> ["<", "<=", "<=>", "==", "===", "=~", ">", ">=", "__id__", "__send__", "`", "between?", "blank?", "class", "clone", "copy_instance_variables_from", "daemonize", "dclone", "display", "dup", "enable_warnings", "eql?", "equal?", "extend", "extend_with_included_modules_from", "extended_by", "freeze", "frozen?", "gem", "gsub", "handler", "hash", "id", "inspect", "instance_eval", "instance_exec", "instance_of?", "instance_values", "instance_variable_get", "instance_variable_set", "instance_variables", "is_a?", "kind_of?", "load", "method", "method_missing", "methods", "nil?", "object_id", "private_methods", "protected_methods", "public_methods", "remove_subclasses_of", "require", "require_gem", "require_library_or_gem", "respond_to?", "returning", "send", "silence_stderr", "silence_stream", "silence_warnings", "singleton_methods", "split", "string", "subclasses_of", "suppress", "taguri", "taguri=", "taint", "tainted?", "to_a", "to_json", "to_s", "to_str", "to_yaml", "to_yaml_properties", "to_yaml_style", "type", "unloadable", "untaint", "with_options"]
Leave a reply