LoginSignup
4
5

UTF-8 テキストファイルを BOM 付へ変換(シェルスクリプト)

Last updated at Posted at 2019-12-04

こんにちは。
UTF-8 テキストファイルを BOM 付へ変換しました。シェルスクリプト(および他方法)を用いました。なお、CSV ファイルを例としています。

シェルスクリプト

実行例1、および入出力ファイル確認は、

$ ./bom.sh a_utf8.csv > a_utf8_bom.csv
$ file a_utf8.csv a_utf8_bom.csv
a_utf8.csv:     UTF-8 Unicode text
a_utf8_bom.csv: UTF-8 Unicode (with BOM) text
$ nkf --guess a_utf8.csv a_utf8_bom.csv
a_utf8.csv: UTF-8 (LF)
a_utf8_bom.csv: UTF-8 (BOM) (LF)

ソース

bom.sh
#!/bin/sh
printf '\357\273\277'
cat "$@"

nkf コマンド利用

nkf コマンドを利用する方法は(参考:【メモ】コマンドでのBOMの追加・削除・確認)。

$ nkf --oc=UTF-8-BOM a_utf8.csv > a_utf8_bom.csv

PowerShell 利用

PowerShell 利用の場合は(参考:Powershellでファイルの文字コードを変換)。

PS> get-content -encoding:utf8 a_utf8.csv | out-file -encoding:utf8 a_utf8_bom.csv
PS> nkf --guess a_utf8.csv a_utf8_bom.csv
a_utf8.csv: UTF-8 (LF)
a_utf8_bom.csv: UTF-8 (BOM) (CRLF)

Microsoft 製品における UTF-8(BOM無)のサポート状況(参考情報)

なお、Microsoft 製品において、UTF-8(BOM無)テキストファイルのサポート状況は:

  • Excelは、UTF-8(BOM無)の CSV ファイルには未対応(2023年現在)2
  • Windows OS のテキストファイルの内容(全文)検索は、UTF-8(BOM無)には未対応(2023年現在)
  • Visual Studio は対応済み(2017年以降)
  • Notepad(メモ帳)は対応済み(2018年以降)
  • PowerShell スクリプト(ps1)は不明3
  1. 参考:「bashでもUTF-8 with BOMなファイルを作りたい」、「UTF-8 な CSV を Excel が読めるように先頭 BOM をつけるシェルスクリプト」。

  2. したがって Excel が抱えている問題として、読み込みには、BOM 付き UTF-8 の CSV ファイルが必要となります。他の対処法としては、CSV ファイル中での非 ASCII 文字の利用を止めるか、または文字コードを Shift JIS へ変換する対処法もあります。

  3. 参考:「SJISと決別し、デフォルトでBOMなしUTF-8を扱えるようにするPowerShell設定

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5