てっきりNKFで変換出来るんだと思っていたら、そうでもないらしい。
手習いでコードを一個一個確認しながら作ってみた。
全角カタカナ以外の文字を入れるといきなり例外になる香ばしい仕様なのでパクる時には注意してください。
Z2HMap = { 64 => [167],65 => [177], 66 => [168],67 => [178], #ァアィイ 68 => [169],69 => [179], 70 => [170],71 => [180], #ゥウェエ 72 => [171],73 => [181], #ォオ 74 => [182],75 => [182,22],76 => [183],77 => [183,22], #カガキギ 78 => [184],79 => [184,22],80 => [185],81 => [185,22], #クグケゲ 82 => [186],83 => [186,22],84 => [187],85 => [187,22], #コゴサザ 86 => [188],87 => [188,22],88 => [189],89 => [189,22], #シジスズ 90 => [190],91 => [190,22],92 => [191],93 => [191,22], #セゼソゾ 94 => [192],95 => [192,22],96 => [193],97 => [193,22], #タダチヂ 98 => [175],99 => [194], 100 => [194,22], #ッツヅ 101 => [195],102 => [195,22],103 => [196],104 => [196,22], #テデトド 105 => [197],106 => [198],107 => [199],108 => [200],109 => [201],#ナニヌネノ 110 => [202],111 => [202,22],112 => [202,23], #ハバパ 113 => [203],114 => [203,22],115 => [203,23], #ヒビピ 116 => [204],117 => [204,22],118 => [204,23], #フブプ 119 => [205],120 => [205,22],121 => [205,23], #ヘベペ 122 => [206],123 => [206,22],124 => [206,23], #ホボポ 125 => [207],126 => [208],128 => [209],129 => [210],130 => [211],#マミムメモ 131 => [172],132 => [212],133 => [173],134 => [213], #ャヤュユ 135 => [174],136 => [214], #ョヨ 137 => [215],138 => [216],139 => [217],140 => [218],141 => [219],#ラリルレロ 143 => [220],146 => [166],147 => [221],148 => [179,22]} #ワヲンヴ def z2h(str) out = "" first_byte = nil str.each_byte do |b| case first_byte when 129 #"ー"だけ1バイト目が129 out += "ー" if b == 91 first_byte = nil when 131 #2バイト目 out += Z2HMap[b].pack("C*") first_byte = nil when nil #1バイト目 first_byte = b else raise "I Can't Convert:Illigal First Byte" end end out end