使いかたは,次のようにします.
$ ruby code.rb 縄手雅彦
日本語文字 縄 手 雅 彦
JIS code: 466c 3c6a 326d 4927
EUC code: c6ec bcea b2ed c9a7
SJIS code: 93ea 8ee8 89eb 9546
#!/usr/bin/ruby
require 'jcode'
require 'kconv'
include Kconv
result_code = []
text = ARGV[0].split(//e)
printf "日本語文字"
for i in 0...text.size
printf "%4s ", text[i]
end
printf "\n"
ary = ARGV[0].tojis.split(//)
str = ary.join.gsub(/\e\(B/,"")
str = str.gsub(/\e\$B/,"")
ary = str.split(//)
for i in 0...ary.size
if ary[i] =~ /\\/
result_code[i] = 92
else
chr = ary[i]
result_code[i] = eval("?#{chr}")
end
end
#p result_code
printf " JIS code: "
for i in 0...result_code.size
printf "%x", result_code[i]
printf " " if i % 2 == 1
end
printf "\n EUC code: "
for i in 0...result_code.size
printf "%x", result_code[i] + 0x80
printf " " if i % 2 == 1
end
printf "\nSJIS code: "
for i in 0...result_code.size
if i % 2 == 0
c1 = result_code[i]
if c1 % 2 == 1
c1 = (c1 + 1) / 2 + 0x70
else
c1 = c1 / 2 + 0x70
end
if c1 >= 0xa0
c1 = c1 + 0x40
end
printf "%x", c1
else
c2 = result_code[i]
c1 = result_code[i-1]
if c1 % 2 == 1
c2 = c2 + 0x1f
else
c2 = c2 + 0x7d
end
if c2 >= 0x7f
c2 = c2 + 1
end
printf "%x ", c2
end
end
printf "\n"
|
| Back |