GNKF: NKF ぽいなにか の v0.3.0 をリリースした
Go 言語における文字列処理の習作 gnkf の v0.3.0 をリリースした。
このバージョンで UTF-8 テキスト中の BOM (Byte Order Mark; U+FEFF) を除去する機能を追加した。
$ gnkf remove-bom -h
Remove BOM character in UTF-8 string.
Usage:
gnkf remove-bom [flags]
Aliases:
remove-bom, rbom, rb
Flags:
-f, --file string path of input text file
-h, --help help for remove-bom
-o, --output string path of output file
Global Flags:
--debug for debug
たとえば
$ echo Hello | gnkf dump
0xef, 0xbb, 0xbf, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x0a
こんな感じに BOM が付いてるテキストに対し
$ echo Hello | gnkf rb | gnkf dump
0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x0a
てな感じで BOM を除去できる。
(東京都の COVID-2019 オープンデータとか) CSV ファイル等に BOM が付いてるものがあって,前々から「誰がこんな要らんことしてんねん」と思っていたが,仕事で再び MS Office ドキュメントを弄るようになって気がついた。 おまえか!
ことあるごとに言っているが, UTF-8 はオクテット単位のストリームなのでエンディアンを指示する BOM は不要である。 てか,付けるべきではない。 大きさを持たないかつ意味のない文字コードを付加するのはリスクである。
昔は文字列の先頭に BOM があるかどうかで文字エンコーディングを判定する手抜き実装もあったが,流石にそんな頭の悪いシステムはなくなっただろう。
なお enc
, norm
, width
, kana
の各サブコマンドでも --remove-bom
オプション(短縮名 -b
)を付けることで,前処理として BOM の除去を行うようにした。
全文をいったんメモリに読み込んで変換処理を行っているので,巨大テキストを処理する際はご注意を。
習作(study)として作ったツールを仕事で使う羽目になるとは orz
ホンマ UTF-8 の BOM は滅びればいいのに。
ブックマーク
参考図書
- プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
- Alan A.A. Donovan (著), Brian W. Kernighan (著), 柴田 芳樹 (翻訳)
- 丸善出版 2016-06-20
- 単行本(ソフトカバー)
- 4621300253 (ASIN), 9784621300251 (EAN), 4621300253 (ISBN), 9784621300251 (ISBN)
- 評価
著者のひとりは(あの「バイブル」とも呼ばれる)通称 “K&R” の K のほうである。この本は Go 言語の教科書と言ってもいいだろう。