日本語文字コード探索

日本語の文字コードをJIS,EUC,SJISでそれぞれ表示します.JISコードにまず 変換した後にその後いろいろ変換しています.1バイトコード文字が混在すると 使えません.また,EUCを使っているUNIX系の端末でコマンドライン引数として 日本語文字を渡す設定としているので,Windows環境では最初のところをすこし いじらないと動きません.ごめんなさい.

使いかたは,次のようにします.

$ ruby code.rb 縄手雅彦
日本語文字  縄   手   雅   彦 
 JIS code:  466c 3c6a 326d 4927 
 EUC code:  c6ec bcea b2ed c9a7 
 SJIS code: 93ea 8ee8 89eb 9546 


code.rb

#!/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