忍者ブログ

書かないと忘れてしまうから

仕事上必要な工夫など、備忘録として残します。

[PR]

2024-05-03
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

[Ruby] Shift-JIS/UTF-8(BOM)/UTF-8(NBOM)を相互変換する

2012-11-06
 日本語 Windows 環境 では Shift-JIS という文字エンコード形式が使用されていますが、Web 環境では UTF-8 という形式が多用されています。さらにUTF-8にはBOMというヘッダがあるものとないものがあるなど厄介です。データを Web とローカルでやり取りする際にはこのエンコードでトラブルが起こることがあるようです。
 今回は、Shift-JIS と UTF-8(BOMあり、BOMなし)の3種類のファイルの相互変換をするRubyスクリプトを作成しました。
 また、改行コードも Windows(CRLF)、UNIX(LF)、Mac(CR)などと環境により異なっていて困りものです。この際ですから出力改行コードも変換します。

■ソースコード(in Ruby 1.9.3)
#! ruby -Ks
# coding:windows-31j
#! /usr/bin/env ruby

require 'nkf'

inf=ARGV[0]
linesep=ARGV[1]

f = open(inf, "r")
  str = f.read
f.close


unless NKF.guess(str)==NKF::UTF8 || NKF.guess(str)==NKF::SJIS then
  puts "Only for UTF-8 or Shift-JIS"
  exit
end

if linesep==nil then
    linesep="-Lu"
  end
     # -Lw:Windows(CRLF) -Lu:UNIX(LF) -Lm:Mac(CR)
    print "
Option of Line Separator : "+linesep+"
"
end

doc_nbom=NKF.nkf('-w80 '+linesep,str)
doc_sjis=NKF.nkf('-s '+linesep,str)

NBOMf=File.dirname(inf)+"/"+File.basename(inf,".*")+"_NBOM"+File.extname(inf)
BOMf=File.dirname(inf)+"/"+File.basename(inf,".*")+"_BOM"+File.extname(inf)
SJISf=File.dirname(inf)+"/"+File.basename(inf,".*")+"_SJIS"+File.extname(inf)

ot = open(NBOMf,"w")
  ot.print doc_nbom
  print "
Created UTF-8 without BOM(NBOM) Formated File
"
  print "  "+NBOMf+"
"
ot.close

ot2 = open(BOMf,"w")
  ot2.print("")
  ot2.print doc_nbom
  print "
Created UTF-8 with BOM Formated File
"
  print "  "+BOMf+"
"
ot2.close

ot3= open(SJISf,"w")
  ot3.print doc_sjis
  print "
Created Shift-JIS Formated File
"
  print "  "+SJISf+"
"
ot3.close

右クリック(Macの場合はしばらくクリック)して、「対象をファイルに保存」などしてください。
 


■実行法
 sjis_utf.rb  xxxxx.xxx [-Lw/-Lu/-Lm]
 第1引数でインプットファイルを指定します。
 第2引数は -Lw:Windows(CRLF) -Lu:UNIX(LF) -Lm:Mac(CR) (省略すると-Lu)
 これにより xxxxx_BOM.xxx,xxxxx_NBOM.xxx,xxxxx_SJIS.xxx が作成されます。
 ただし、RUBY.EXE に PATH が通っていなければエラーになります。

 ひとに説明するほど詳しくないのですが、簡単に記すと、
 (1)Shift-JIS,UTF-8以外は処理しない。
 (2)NKFの -w80 オプションでBOMなしファイルを作成し、
 (3)BOMヘッダ+BOMなしファイルでBOMありファイルとする。
 (4)NKFの -s オプションでShift-JISファイルを作成する。
 という流れです。

 Shift-JIS と UTF-8(BOMあり、BOMなし)、いずれを読み込んでもできるファイルは3種類です。場合によっては元のファイルと同じ物も含まれていると思いますが判別していません。

 
 Ocraでコンパイルした実行ファイル

右クリック(Macの場合はしばらくクリック)して、「対象をファイルに保存」などしてください。
 

PR

コメント

お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字

プロフィール

HN:
otsukare30
性別:
男性
自己紹介:
mail:otsukare30★gmail.com

カレンダー

04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

ブログ内検索

忍者カウンター

P R