Help us understand the problem. What is going on with this article?

Slack に 1MB 以下の BOM 付き CSV をアップロードすると BOM が消える

 UTF-8 の CSV を Excel でも文字化けを起こさず開くために、BOM (\uFEFF) を付けた CSV を hubot で Slack にアップロードするものを開発していました。

 アップロードされたファイルをダウンロードして Excel で開くと、なぜか文字化け。調べてみると、なんと BOM が消滅していることに気づきました。
 しかし、必ず起こるわけではなく、別の CSV では消えていません。

 数時間悩み調べた末、解決方法はまだ分かっていないものの、原因は判明しました。
 検索しても同じ現象で悩んでいる人が見つからなかったので、備忘録も兼ねて投稿しておこうと思います。

結論: スニペットに変換されると消える

 Slack は、テキストベースのファイルをアップロードすると、どうやら 1MB 以下のものはスニペット表示をするようです。

 まず、1024KB の BOM 付き CSV ファイルをアップロードしてみます。
image.png
 スニペットとして表示されます。これを少し行を増やして 1025KB にし、1MB を超えると……
image.png
 意図通り、ファイルとしてアップロードされました。
 そしてそれぞれをダウンロードしてみると、前者のスニペット表示された方は BOM が消滅してしまいました。。。

ビミョーな回避策

 あまりちゃんとした方法ではないのですが、なぜか 1MB 以下でもスニペットに変換されずにファイルとしてアップロードできる方法を見つけました。
 その方法とは「ファイルの先頭に BOM を 2 つ書く」です。これでなぜかうまくいきました。

image.png
 上記とおり、エクスプローラ上で 919KB の BOM を 2 つ書いた CSV をアップロードしたら、1MB 以下でもファイルとしてアップロードできました。もちろん、テキストでその CSV を開くと 2 つ目の余分な BOM があるのでかなり気持ちが悪いのですが……。

 なぜなんでしょうか? 最初の \uFEFF は BOM として処理されて、ファイルの最初は実質 2 つ目の \uFEFF ということになり、普通の文字コードじゃないからバイナリファイルか何かと解釈されたんでしょうか? となると、最初の BOM の後は他のものでもいいのかもしれません。

他に試したこと

アップロードのオプション で、filetype に binary とか指定してみてアップロードしましたが、それはダメでした。

お願い

 どなたか、Slack で 1MB 以下の CSV ファイルをアップロードしてもスニペットにされないまともな方法をご存知でしたら教えて下さい!!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした