UTF-8のBOM付きCSVファイルはエクセル→スプレッドシートの貼り付けで不具合!

CSVファイルを出力した場合、BOM付きのUTF-8だとエクセルでは文字化けせず表示されます。

しかし、エクセルからスプレッドシートにデータの貼り付けを行った際にスペースや改行に不具合が生じます。

CSVの文字コードはUTF-8が一般的

CSVはデータをカンマ(,)区切りで分けられたデータです。

行をレコードとして、カンマでレコードの要素を記述することで色々なデータをCSVとして出力できます。

エクセルのデフォルトの拡張子であるxlsまたはxlsxと異なり、メモ帳などのテキストエディタでも表示可能です。

システム的にもデータベースにあるデータをカンマ区切りで整形すればよく、逆にシステムに取り込むときもカンマ区切りで取り込めるのでよく使われています。

ただ、CSVファイルはサービスから出力されることが多いため、文字コードがUTF-8であることが多いです。

UTF-8のCSVはエクセルで開くと文字化け

UTF-8のCSVファイルの問題点は、Windowsのエクセルで開くと文字化けしてしまうことです。

上の画像はTwitterのアナリティクスからダウンロードしたCSVファイルをエクセルで開いたものですが、文字化けで何が入力されているかわかりません。

サービスが稼働しているサーバーはLinuxOSのことが多く、WindowsOSのShift-JISではないため、UTF-8でCSVが生成されます。

エクセルは文字コードがShift-JISとして、UTF-8のCSVファイルを読み込むため、文字化けが発生してしまいます。

BOM付きUTF-8とは

エクセルで文字化けを防ぐ方法として、事前にテキストエディタ(メモ帳)などで開いて、Shift-JISに変換する方法です。

下記の記事では、TwitterアナリティクスのCSVファイルを文字化け解消する方法を紹介しています。

Twitterアナリティクスのcsvデータの文字化けを解消する方法(Windows版)

ただ、UTF-8のままでもエクセルで文字化けしないのが「BOM付きUTF-8」です。

BOMはバイトオーダーマーク(Byte Order Mark)の略で、文字コードの先頭に付与されたデータです。

このBOMのデータがあると、エクセルは文字コードが何か判別できるようになり、UTF-8でも認識できるようになります。

そのため、UTF-8のCSVファイルをBOM付きUTF-8にできれば、エクセルで文字化けせずに読み込むことができます。

BOM付きUTF-8のCSVをスプレ貼り付けで不具合

そんなBOM付きUTF-8のCSVファイルをエクセルで開いたあと、Googleスプレッドシートにセルデータを貼り付けたところ、不具合が生じました。

セル内に存在する全角スペースが半角スペースに置き換えられ、改行が改行+半角スペースに置き換わる事象が発生したのです。

これは先程の文字コードが原因となっています。

エクセルとスプレッドシートでは使用している文字コードが異なるため、スプレッドシートに貼り付けた際に異なる解釈されます。

改行コードは特にShift-JISとUTF-8では異なっているため、そうした不具合が生じます。

エクセルで開いたCSVファイルのスプレの貼り付け方法

エクセルでBOM付きUTF-8のCSVファイルをスプレッドシートに貼り付ける際に、不具合を防ぐ方法があります。

通常貼り付けではショートカットキー「Ctrl + V」を使用します。

しかし、通常の貼り付けは元のデータ形式を保持するため、不具合が起きます。

その際に「値の貼り付け(Shift + Ctrl + V)」を使えば、回避できます。

そのため、CSVファイルをエクセルで開き、スプレッドシートに貼り付ける場合は、値貼り付けを活用しましょう。

まとめ・終わりに

今回、BOM付きUTF-8のCSVファイルをエクセルで開き、そのデータをスプレッドシートに貼り付ける際に不具合が生じることを紹介しました。

CSVファイルの文字コードをBOM付きUTF-8にすることで、エクセルで開いても正常に表示されます。

しかし、そのデータをスプレッドシートに貼り付けると半角スペースが全角スペースになったり、改行が半角スペース+改行に変化してしまいます。

これは、BOMはエクセルで開く際には文字化けを防ぐ要素になりますが、スプレッドシートには不要な要素です。

エクセルのデフォルト文字コード「Shift-JIS」とスプレッドシートの「UTF-8」で、全角スペースや改行が異なることで不具合が生じます。

BOM付きUTF-8のCSVファイルをエクセルで開いたあと、スプレッドシートに貼り付ける際は「値の貼り付け(Shift + Ctrl + V)」を使いましょう。