如何确定Ruby中的宽字符? (中文,日文,韩文)

时间:2011-02-21 09:40:39

标签: ruby cjk

我试图确定字符串的物理像素宽度。

例如:

FONT_SIZE = 10
str="123456789"
width = str.length * FONT_SIZE  # which will be 9 * 10 = 90px

问题:但对于中国人,日本人或韩国人:

FONT_SIZE = 10
str="一二三四五六七八九"
width = str.length * FONT_SIZE  # this still result in 90 (9*10)

但它真的应该是180,因为它们是每个字符的2个字符。

如何制作此功能(返回true / false)?

def is_wide_char char
  #how to?
end

class String
  def wlength
    l = 0
    self.each{|c| is_wide_char(c)? l+=2: l+=1}
    l
  end
end

1 个答案:

答案 0 :(得分:1)

How can I detect CJK characters in a string in Ruby?给出答案

class String
  def contains_cjk?
    !!(self =~ /\p{Han}|\p{Katakana}|\p{Hiragana}\p{Hangul}/)
  end
end

strings= ['日本', '광고 프로그램', '艾弗森将退出篮坛', 'Watashi ha bakana gaijin desu.']
strings.each{|s| puts s.contains_cjk?}

#true
#true
#true
#false