Windows端末でCSVファイルをアップロードした時に、文字コードが原因でエラーになる

処理概要
CSVファイルをアップロードし、データを登録する処理を実装しようとしています。
その際にworkflowで「Upload data as CSV」を利用し、対象の1テーブルにデータを登録します。

問題箇所
Macで作成したCSVファイルであれば文字コードがUTF-8のため、問題なくアップロードされるのですが、Windowで作成したCSVファイルだと文字コードがS-JISで保存されます。そのため文字化けが発生して、アップロード登録の条件である「テーブルのカラム名とヘッダ項目の名前の一致」が行われなくなり、データ登録ができません。

文字コードをUTF-8に変換してアップロードをする方法、もしくは別のやり方でCSVのアップロードを行えるようにする方法があれば教えていただけないでしょうか?

なお、顧客向けに提供する機能であるためアップロードするCSVファイルの文字コードを変更してもらい、アップロードさせるような対応は極力とりたくないと思っております。

<参考情報>
問題となっている挙動

Workflow

Uploadファイル


テーブル情報
スクリーンショット 2021-05-04 18.05.48

「いいね!」 1

それって、 ご自身がファイルを変更できれば良いですよね?

であれば、Windows端末で、Excelがインストールされていれば、ファイル形式「CSV UTF-8(コンマ区切り)(.csv)」 変更すれば問題ないと思います。

CSVファイルの文字コードを「UTF-8」に変換する方法は?

https://ad2.zendesk.com/hc/ja/articles/360009714573-CSVファイルの文字コードを-UTF-8-に変換する方法は-

早い返信ありがとうございます!

それって、 ご自身がファイルを変更できれば良いですよね?

はい、私自身でファイルの文字コード変更するのであればその方法で問題ないのですが、
実運用としましては、こちらで作成したサンプルのCSVファイルを、法人の顧客が編集してデータを設定し、アップロードする流れになっています。

顧客の中にはPCの操作に不慣れな方もいらっしゃるので、
なるべく負担をかけないようにCSVを編集して保存するだけ(文字コードの変更のような手間をかけないよう)にしたいため、Bubble側の処理で文字コードの問題をなんとかしたいと思っておりました。

もちろん最終的に何も打つ手がなければ、tsubasaさんのおっしゃるようなやり方で顧客側に対応していただこうと思ってはいますが、もし何か良い方法があればBubble側で対応したいと思っております。

「いいね!」 1

Bubbleで全くできないことは無いと思うのですが、プラグイン作成になるのではと思います。

【参考】 Bubbleのプラグインを使ってみよう。
https://blog.nocodelab.jp/entry/create-plugin

また、先方のファイルフォーマットが決まってない(に近しい)状態なので、構築側の負担がかなり大変だと思います。

例えば、javascript などで変更することもできるのですが、UTF-8 そのものが挙げられていた場合には、誤作動したりするかもしれないので、ある程度想定されるファイルパターンに対する条件分岐が必要になると思います。
【参考】

逆に、Excel側を固定して、マクロを汲んで一定のファイル出力を汲んだ方が良いかもしれません。
UTF-8で自動出力

「いいね!」 2

アドバイスありがとうございます!

記載してくださった以下2つを検討してみます。
・プラグイン実装
・Excel側を固定でのマクロ出力

進捗あり次第どのように対応したかを記載しようと思いますが、
いったんこの質問はクローズで大丈夫です。

「いいね!」 1

ちょうど今 自分も格闘しています。
IntegromatのConvert the encoding of a textというものを使えば、両方のフォーマットでもうまく変換できることが確認できています。
ただ、これを再度bubbleに格納し直すフローができていません。

確立できたらシェアします〜。


「いいね!」 2

なるほど。Integromatを活用するという発想は思い浮かびませんでした!
ありがとうございます。方法を確立できたら共有してもらえると助かります。

これに近い話をKさんとしていたのですが、下記の前提ならば特に問題なくIntegromatで実装可能です。
・CSVのレコード数が十分に少ないこと
上記のKさんが例示したIntegromatのフローでArray aggregatorの後にIterater+BubbleのCreate Thingで挿入できます。

レコード数が多い場合は、実行回数がかさむためIntegromatのコストが無視できなくなります・・・。

BubbleのBulk Insertが1000件単位なので、Integromatで1000レコード単位までにArrayを分割し、GASなどでJSONをBubbleのAPIで受け取れるJSONのような文字列に整形し戻すというAPIを作成→IntegromatでBubbleにBulk Insertするという方法も取れますが、、、コーディング必須です。

「いいね!」 3

ご返信ありがとうございます!

CSVのレコードが最大件数が1000~3000行程度になる可能性があるので、その時のパフォーマンス次第ですかね。とはいえ別ツールと連携させるやり方ができるというのは参考になりました!
(学習の意味も含め、どの程度のパフォーマンスになるのか時間を見つけて試しに連携してみようと思います)

結局、私の方はプラグインを作成してみたものの、登録時のパフォーマンスが悪く
最終的にtsubasaさんが最初に提案してくださった顧客に変換してもらう方法で対応しました。

一応、下記の通りやればS-JISでも問題なくアップロードできましたが
登録速度が遅く、かつ 1行1行の登録になり順序性も担保されなかったので、
作りはしたものの実用的なレベルには至らなかったという感じです。

①ファイルをアップロード
②自作プラグインにて文字コードをS-JISからUTF-8に変換
→ファイルのパスを取得しファイルの文字列を取得、stateに1行ずつ変換後の文字列をListで設定
③backend workflowにて1行ずつ登録

「いいね!」 2

現在、以下のプラグインを開発中です。

・アップロード前のバリデーションチェック
・フォーマット変換( UTF-8へ)
・1000行を超える場合は 1000行づつ bulk API にて新規レコード作成

完成は6月中だと思います〜

「いいね!」 6

これができればかなりアップロードの体験は向上しますね!
CSVアップロード時にバリデーションがかけられないのも、
地味にBubbleイけてないな〜と思ってたのでそこが解消されるのもいいですね!

「いいね!」 1