Skip to content

Instantly share code, notes, and snippets.

@chriskk
Created March 28, 2013 21:28
Show Gist options
  • Save chriskk/5266951 to your computer and use it in GitHub Desktop.
Save chriskk/5266951 to your computer and use it in GitHub Desktop.
Sample ruby code to convert from zenkaku katakana to hankaku. Reference: http://d.hatena.ne.jp/mingos/?of=32
$KCODE = 'u'
class TextFilter
@@zenkaku_kana = %w(ガ ギ グ ゲ ゴ ザ ジ ズ ゼ ゾ ダ
ヂ ヅ デ ド バ ビ ブ ベ ボ パ ピ プ ペ ポ ヴ ア イ
ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ
ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ
ム メ モ ヤ ユ ヨ ラ リ ル レ
ロ ワ ヲ ン ャ ュ ョ ァ ィ ゥ ェ ォ ッ
゛ ゜ ー ! ).freeze
@@hankaku_kana = %w(ガ ギ グ ゲ ゴ ザ ジ ズ ゼ ゾ ダ
ヂ ヅ デ ド バ ビ ブ ベ ボ パ ピ プ ペ ポ ヴ ア イ
ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ
ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ヲ ン ャ ュ
ョ ァ ィ ゥ ェ ォ ッ ゙ ゚ ー ! ).freeze
@@zenkaku_alnum = %w(0 1 2 3 4 5 6 7 8 9
a b c d e f g h i j k l m n o p q
r s t u v w x y z A B C D E F G H I
J K L M N O P Q R S T U V W X
Y Z).freeze
@@hankaku_alnum = %w(0 1 2 3 4 5 6 7 8 9 a b c d
e f g h i j k l m n o p q r s t u v w x y z A B
C D E F G H I J K L M N O P Q R
S T U V W X Y Z).freeze
def self.zen_to_han(str)
str = str.clone
str = self.filter(str, @@zenkaku_alnum, @@hankaku_alnum)
self.filter(str, @@zenkaku_kana, @@hankaku_kana)
end
private
def self.filter(str, from, to)
str = str.clone
from.each_with_index do |int, i|
str.gsub!(int, to[i])
end
return str
end
end
require 'nkf'
text = "アイウエオ0123456789!"
after = TextFilter.zen_to_han(text)
puts NKF.nkf('-m0 -s -x', text)
puts NKF.nkf('-m0 -s -x', after)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment