【小ネタ】Mac の Excel で csv を編集するときにハマった話
こんにちは、高崎@アノテーション です。
はじめに
筆者は長らく Windows 環境下で従事しておりました。
最近は Mac で業務することになったのですが、その中で特に印象に残っている内容を小ネタとしてブログにします。
前提条件
以下の要件で作業する話になります。
- 入力ファイルは Windows で生成した csv ファイル
- このファイルを予め用意したバッチプログラムへ入力させたい
- ただし、バッチプログラムを実行させるために以下を行う必要がある
- 各行の文字列をバッチが処理できるよう整形する
- 文字コードは BOM 無し UTF-8
当方の手順としては概ね以下になります。
- Excel で各行の文字列を整形して保存する
- 保存したテキストを VSCode で UTF-8 へ変換する
ハマった内容
Mac Excel で編集した後、VSCode で UTF-8 へ変換すると一部の文字が文字化けしました。
元の csv は Mac Execl 上でも見ることが出来たので確認すると、ローマ数字の文字が入っていてここが文字化けしており、2〜3箇所だったためそのまま手作業で修正してバッチに渡していました。
以前からテキストを作る際に丸数字の文字とローマ数字は機種依存となり見え方が変わる(Windows で丸数字の1は Mac だと日曜の「(日)」に変わる)ので禁忌、とは聞いていたのですが、その辺りの文字種別の違いなのかと思っていたのでちょっと調べてみました。
Windows で生成したファイル
こんな感じの csv を用意します。
テスト Win Excel,,,,,,,,, ①,②,③,④,⑤,⑥,⑦,⑧,⑨,⑩ Ⅰ,Ⅱ,Ⅲ,Ⅳ,Ⅴ,Ⅵ,Ⅶ,Ⅷ,Ⅸ,Ⅹ
Mac Excel で見る
Windows で作ったファイルでも Mac 上で見ることが出来ますね。
VSCode で見る
で、化けますが、ここで右下の「UTF-8」を選択し、「エンコード付きで再度開く」から Shitf JIS にして読み直すと、
と、こんな感じで見ることが出来、これを utf-8 で保存をする、ということで作業を行っていました。
Mac で生成したファイル
用意するファイルは前項の「Win」の箇所を「Mac」に変えただけのものです。
テスト Mac Excel,,,,,,,,, ①,②,③,④,⑤,⑥,⑦,⑧,⑨,⑩ Ⅰ,Ⅱ,Ⅲ,Ⅳ,Ⅴ,Ⅵ,Ⅶ,Ⅷ,Ⅸ,Ⅹ
Mac Excel で作成する
Mac からこんな感じで作成して保存します。
VSCode で見る
同じく化けますが、エンコードをやり直して読み直しても…
と、化けた状態のままでした。
原因
それぞれのファイルをバイナリで見てみると判明しましたが、Windows Excel は cp932、Mac Excel は MacJapanese のコード体系でプレーンテキストを保存するようですね。
コード体系の違いは下記のページが非常にわかりやすかったです。
uic.jp による MacJapanese と cp932 の比較表
参考までにバイナリエディタで見てみる
Windows csv をバイナリモードで開く(VSCode の Hex Editor の拡張機能を使用して開く)と、
Mac csv はこうなります。
Excel では両方見えていましたが、バイナリレベルで違っていますね。
おわりに
余談ですが
VSCode で変換せずにnkf -w
を用いれば cp932 であれ MacJapanese であれ綺麗に utf-8 へ変換してくれました。
最初からこうすれば良かったのですが、色々勉強になったのでよしとします。
対処について
本件で考えられる対応は、他にもあるでしょうが概ねこんな感じでしょうか。
- 入力から整形してもらった csv を提出して頂く(当方は UTF-8 への変換のみ)
- Excel 整形後は nkf を使って変換する
- バッチ側で入力の csv をそのまま読み取れるようにする
- 文字列整形と UTF-8 変換を纏めてスクリプトを生成して変換する
今回は、変更へのインパクトや今後可能な限り円滑な自動化を行いたいこともあり 4. を採用しました。
わかったこと
- Mac Excel のテキスト保存は指定が無い場合は MacJapanese で保存する
- VSCode の utf-8 への変換は cp932 ベースだと上手くいくが MacJapanese についてはまだ追従出来ていない(2023/9/29 現在)
- nkf は偉大だ
Mac Execl は MacJapanese で保存していることをご存じの方であれば自明な内容かもしれませんが、ご参考になれば幸いです。
アノテーション株式会社について
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。
「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。
現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。
少しでもご興味あれば、アノテーション株式会社WEBサイト をご覧ください。