サイボウズ「連携コネクタ」についての次の投稿を作成している時、原因不明のエラーに遭遇しました。
遭遇したエラー
「表データをCSVファイルに出力」で、取得したkintoneレコードの一覧をCSVファイルに出力するステップで「テスト実行」をした時のことです。
ファイル操作エラー:ファイルアップロードに失敗しました。
文字コードを「UTF-8」の時は問題なかったのですが、「Shift_JIS」に変えたらエラーになりました。「CP932」でもエラーでした。
「ファイルアップロードに失敗しました」というメッセージだけなので、何が原因かしばらくわからず、文字コードShift_JISが原因だと気がつくまで時間がかかりました。
もうちょっとエラーの原因がわかるメッセージを出して欲しい😭
原因調査
最初、連携コネクタの不具合?と思ったのですが、別のシナリオを作成して別のアプリの一覧をCSVファイルに出力してみたところ、Shift_JISでも問題はなかったので不具合ではありませんでした。
🧠AIに相談したところ、以下のような回答。
UTF-8:○ / Shift_JIS:× / CP932:× なら、最有力は CP932でも表現できないUnicode文字が表データに含まれている ケースです。CP932はShift_JISより表現できる文字が多いので、それでも失敗するなら、たとえば以下が候補です。
- 絵文字:😀 👍 ✅ など
- 一部のUnicode記号
- Unicodeにしかない漢字・異体字
- サロゲートペアで表現される文字
- コピー&ペーストで混入した特殊文字
エラーになったアプリには、レコードが5つしかなかったので、全レコード眺めてみましたが、特に絵文字や怪しい記号が入っているものはなさそうです。
次は、連携コネクタの「レコードの一覧取得」で、クエリに「レコード番号="1"」から順に設定してレコードを1つずつ取得し、Shift_JISでの出力がエラーになるレコードを探しました。
その結果、レコード番号1のレコードだけが、Shift_JISでの出力がエラーになることがわかりました。
原因判明で解決
UTF-8でなら出力できるので、問題のレコード番号1をUTF-8で出力して、AIに聞きました。
このデータ(UTF-8で書き出したもの)が、Shift-JISで書き出そうとしたらエラーになったものです。怪しい文字はありますか?
なんと、レコードの画面ではサムネイルになっていてファイル名が見えていなかった「ブランク_ペイント用.png」という添付ファイルのファイル名の濁点・半濁点が結合文字として分離されており、濁点・半濁点がCP932やShift_JISではエンコードできないものであるとのこと。
ブ = U+30D6
ではなく
フ +゙ = U+30D5 + U+3099
ペ = U+30DA
ではなく
ヘ +゜ = U+30D8 + U+309A
になっているのが原因だったのです。
このレコードを削除したところ、問題なくShift_JISで出力できるようになりました。
無事解決です。
まとめ
Macでは歴史的に、日本語ファイル名の「ガ」「ブ」「ペ」などの濁点・半濁点付き文字が、見た目は1文字でも、内部的には「カ+゛」「フ+゛」「ヘ+゜」のように2文字に分かれた状態で扱われることがあるそうです。
このように、1つの文字を複数の文字に分解して表現する形式を「NFD(分解形)」といい、Macではこれに近い形式が使われてきたそうです。
現在のmacOSでは必ずこの形式になるわけではありませんが、Mac由来のファイル名などには、このような分解された文字が含まれることがあります。見た目では普通の文字と区別できないため気づきにくく、まさに今回のようなエラーの原因になることもあります。
「UTF-8なら成功するのにShift_JISやCP932では失敗する」という場合は、見た目ではわからない結合文字が含まれていないか、添付ファイル名も含めて確認してみるとよさそうです。


