* UTF-8 BOMの変換 [#jdf237ab]

** BOMの確認 [#hd3b68a8]

*** xxdコマンド [#k00c62f1]
BOMなし
 $ xxd utf8-no-bom.txt
 00000000: 3132 330d 0a                             123..
"123"とだけ書かれたファイルとする。

BOMあり

 $ xxd utf8-bom.txt
 00000000: efbb bf31 3233 0d0a                      ...123.
先頭が"efbbbf"で、続いて"123"と書かれたファイル。

*** fileコマンド [#e7d4e165]
BOMなし
 $ file utf8-no-bom.txt
 utf8-no-bom.txt: ASCII text, with CRLF line terminators

BOMあり
 $ file utf8-bom.txt
 utf8-bom.txt: UTF-8 Unicode (with BOM) text, with CRLF line terminators

*** BOM(バイトオーダーマーク)の実際 [#n86fc024]
|エンコーディング | バイト列の実際 |h
| UTF-8 | 0xEF 0xBB 0xBF |
| UTF-16 BE | 0xFE 0xFF |
| UTF-16 LE | 0xFF 0xFE |

https://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%88%E3%82%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%83%9E%E3%83%BC%E3%82%AF

** BOMの削除 [#vcf252fa]

*** nkfコマンド [#s7e7fa5a]
 cat utf8-bom.txt | nkf --oc=utf-8
 cat utf8-bom.txt | nkf -W -w80

- http://www.atmarkit.co.jp/ait/articles/1609/29/news016.html
http://www.atmarkit.co.jp/ait/articles/1609/29/news016.html

*** sedコマンド [#ufe65fad]
 cat utf8-bom.txt | sed -e '1s/^\xef\xbb\xbf//'

*** awkコマンド [#t2ada614]
 cat utf8-bom.txt | awk '{if(NR==1)sub(/^\xef\xbb\xbf/,"");print}'

*** tailコマンド [#i5d380a9]
 cat utf8-bom.txt | tail --bytes=+4

*** 複数のファイルからまとめて削除 [#y25f0fa8]
 find . -type f -exec sed -i -e '1s/^\xEF\xBB\xBF//' {} \;

http://muzso.hu/2011/11/08/using-awk-sed-to-detect-remove-the-byte-order-mark-bom

** BOMの追加 [#d3359b8a]

*** nkfコマンド [#y6628498]
 cat utf8-no-bom.txt | nkf --oc=utf-8-bom

*** vim [#u21d2acd]
 vim utf8-no-bom.txt  # 1. vimで開く
 :set bomb            # 2. :set bomb でBOMを設定する
 :w utf8-bom.txt      # 3. :w で保存する

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS