?を探す(文字化けチェック)
CSV ファイルを送付してもらい、その内容をもとにして Google Workspace のアカウント作成を行っていますが… CSV ファイルに書き出したことで、文字化けが発生しているケースが散見されました。
イメージとしては、下図のような感じです。 ※実際のデータではありません。
文字化けしてしまっているので ?? となっている文字が何だったのかはわかりません。CSV ファイルを確認したところ、?? の部分は ?(文字コード 0x3F)が連続しているだけでした。
このように文字化けした ?? をどうやって探したらいいでしょう?
Microsoft Excel の場合
Microsoft Excel で以下のような「検索と置換」ダイアログで検索が行えますが、ここで ? を入力しても、「*」と「?」は特別な記号として扱われ、ワイルドカードとして処理されてしまい、? を見つけることができません。
? をワイルドカードではなく、「?」そのものとして検索させたい場合には、~ を付けて
~?
として入力すると、「?」そのものを検索できます。
Google スプレッドシートの場合
似たようなアプリケーションの Google スプレッドシートの場合は、ワイルドカードとして扱われる「?」そのものとして検索させたい場合には、
\?
として入力すると、「?」そのものを検索できます。
下図のように「正規表現を使用した検索」を ON(✅)にして検索することになるため、正規表現で記号をエスケープするために \(半角文字の¥、バックスラッシュ)を付けます。
まとめ
前述のようにすれば、Microsoft Excel や Google スプレッドシートでも、文字化けして ?? となった文字を探せるのですが… 文字化けした文字が必ずしも ?? となるわけでもありません。
外字が設定されていたのか表示としては「・」などと表示されるケースもあるので、? を探すだけでは確実とは言えないんですよね…
この辺りまでしっかりとプログラムでチェックしようとすると…
この記事の主題であった ? を探すだけであれば、以下のように文字列に対する .includes() で '?' を探してやれば、文字列単位でチェックできるのですが、
.includes('?')
外字が含まれているかを確認しようとすると、以下 URL で説明されているように「文字」→「文字コード」に変換して、一文字ずつ外字が含まれていないかをチェックしなければならなくなります。
こういった氏名の取り扱いって、もう少しすっきりしないものですかね…