June 27, 2016

Eclipse:新規ファイルにBOM(UTF-8)をつける

Eclipse で新規にファイルを作成すると Workspace に設定されたエンコードで保存されます。 文字エンコーディングを UTF-8 に設定した場合、新規にファイルを作成しても BOM は付きません。 そこで、BOM を付加するスクリプトを書きました。Ruby 版と Python 版があります。

AddBom.rb

#! /usr/bin/env ruby

path = ARGV[0]
puts "Add BOM to #{path}"
src = File.read(path)
bom = "\xEF\xBB\xBF"
if src.index(bom) == 0
	raise "BOM already exists"
end

File.open(path, "w") do |io|
	io << bom
	io << src
end

AddBom.py

# -*- coding:utf-8
import os
import sys

def main(path):
    f = open(path, mode='rb')
    data = f.read()
    f.close()

    utf8bom = "\xef\xbb\xbf"
    if len(data) >= 3:
        if data[0:3] == utf8bom:
            print "BOM already exists " + path
            return 0

    f = open(path, mode="wb")
    f.write(utf8bom)
    f.write(data)
    f.close()
    print "Add BOM to " + path
    return 0

if __name__ == '__main__':
    if len(sys.argv) < 2:
         print sys.argv
         print "addbom <path>"
         sys.exit(0)
    else:
        sys.exit(main(sys.argv[1]))

eclipse に外部ツールとして登録する

メニューバーから Run > External Tools > External Tools Configurations... を選択します。 新規作成し、AddBom.rb もしくは AddBom.py を登録します。

AddBom.rb の場合

項目 設定
Name AddBom
Location ruby.exe のパス
Arguments <AddBom.rbのパス> ${resource_loc}

AddBom.py の場合

項目 設定
Name AddBom
Location python.exe のパス
Arguments <AddBom.pyのパス> ${resource_loc}

使い方

新規ファイルを作成し、そのファイルを開いた状態で AddBom を実行します。 BOM がなければ追加され、すでに追加されていれば何もしません。 また、空ファイルでなくても問題なく動作します。