1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GoogleAppsScriptでのGoogleDrive上のフォルダ/ファイル名検索におけるuft-8-macによるエラーについて

Posted at

#はじめに
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文字ずつ消しても普通に消えてしまうが、エラーは発生する。)

↓バックスペースを1回クリックで「グ」→「ク」に。
スクリーンショット 2021-01-16 18.54.40.png
スクリーンショット 2021-01-16 18.54.56.png

#まとめ
色々調べる中で、様々な場面でuft-8-macによる障害が出ていることがわかった。
MacOSを絡めた文字列指定の処理を実装する際は注意したい。
また執筆にあたりsafariで事象再現を試みた際に再発せず、Chromeのエンコード機能が無いこと(v55以降にて廃止)、safariがアップロード時やブラウザ表示時にエンコード処理をしてくれていることに気づいた。
開発がクラウドベースに移行するにつれて、開発環境としてのWebブラウザの重要度が高くなっているように感じており、そちらにも注意を払いたい。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?