#はじめに
GASを利用したLINE Botの開発中に発生した。
LINE Botでは送信された文字列に一致するフォルダ/ファイルパスを返却する処理を実装。
#開発環境
- MacOS Catalina 10.15.7
- Safari 13.1.3
- Google Chrome 87
- Google Drive 44.0
#エラー内容
LINEよりフォルダ/ファイル名を送信したところ、一部のフォルダ/ファイルにて、
名称が一致するにも関わらず検索に引っかからなかった。
GAS上の文字列一致判定にて不一致と判定されてしまう。
#原因
MacPCよりChrome経由でフォルダ/ファイルをアップロードした際に、
フォルダ/ファイル名の文字コードが uft-8-macのままアップロードされたことが原因。
MacOSのファイルシステム(HFS+)は濁点・半濁点を分離して扱う uft-8-mac (NFDの亜種?)が採用されている。
uft-8-mac形式で「ダ」や「ぱ」などが入っているフォルダ/ファイル名は、GAS上で文字列比較する際に不一致と判定されてしまう。
#解決策
今回は当該のファイル/フォルダが少なかったため、Google Drive上で名前変更することで解消。
ちなみにその名前変更をChrome上で行うとバックスペース1文字ずつ消す際に、濁点・半濁点と本体の文字が別々に消去される様が確認できる。
その他の解決策としては、ファイル/フォルダをsafari経由でアップロードすると、今回の事象は解消される。(Chrome経由で上げたフォルダはsafari上でバックスペースで1文字ずつ消しても普通に消えてしまうが、エラーは発生する。)
#まとめ
色々調べる中で、様々な場面でuft-8-macによる障害が出ていることがわかった。
MacOSを絡めた文字列指定の処理を実装する際は注意したい。
また執筆にあたりsafariで事象再現を試みた際に再発せず、Chromeのエンコード機能が無いこと(v55以降にて廃止)、safariがアップロード時やブラウザ表示時にエンコード処理をしてくれていることに気づいた。
開発がクラウドベースに移行するにつれて、開発環境としてのWebブラウザの重要度が高くなっているように感じており、そちらにも注意を払いたい。