意外とはまってしまった文字コード変換

意外とはまってしまった文字コード変換

文字コードって

文字コードとは、文字や記号をコンピュータで扱うために、文字や記号一つ一つに割り当てられた固有の数字のこと。

この中でも最もポピュラーな文字コードとして普及されている文字コードに『ASCII(アスキー)コード』というものがあります。これはローマ字、数字、記号、空白文字など128文字が収録され、整数でそれぞれが表現されています。

今回はこの文字コードではまってしまった初歩的だけど知らないときっと同じようにはまってしまうコトについて書いていきます。

カスタマイズで特定の記号文字を許容する

私が今担当している運用・問い合わせ業務では、メインミッションのひとつとして、クライアントからの依頼で既存サービス内でまかなえないけど、どうにかしてこれを実現できないか?という内容をカスタマイズという形でJavaScriptを書いてより近い形での実現を提供するというものがあります。

今回の依頼は、ある入力フォームの項目に対して、特定の記号を許容し、それ以外の記号が入力されたらエラーを返してあげるというカスタマイズ依頼でした。

本来は、サービス内の機能でその項目に許容したい記号の正規表現を記載してあげれば完了という至ってシンプルな対応だったはずなのですが・・・。

どう頑張ってもある文字が正規表現でうまく反応してくれませんでした。

それは『円マーク』

この円マークが入っていたことで、やむなく記号を文字コードに変換してその文字コードを許容するというJavaScriptを書くことになりました。

WindowsとMacの壁

早速円マーク(¥)を含めてカスタマイズが完了した項目を動作確認するためWindowsでチェックしました。
問題なく許容してくれています。

今度はMacでチェックをすると・・・なんと許容してくれていませんでした。
しかも代わりに、バックスラッシュ(\)の文字コードが許容されてしまいました。

調べてみると、なんと円マークはmacとWindowsで文字コードが異なることがわかりました。

mac:165
Windows:92

さらに、バックスラッシュの文字コードが

mac:92

だったのです。(これ、結構有名な文字化けでした。そういえばmacで通販のサイトなんかを見たりすると、合計金額のところが¥1,000と表示されるはずが\1,000となってしまっているのをよく見かけてました。)

正規表現で円マークだけうまくいかなかった理由もおそらくこいつが原因のようです。

また、この問題のせいで、今回の許容文字の中にバックスラッシュは含まれていないため、macだけ文字コード92は許容しないという対策を取る必要がでてきました。

結局、クライアントに相談したところ、バックスラッシュはほぼ入力されることのない箇所でしかもmacユーザーのみなので、macのみバックスラッシュ許容という形で幕を閉じました。

しかし、今後も同様の依頼が来た際には、対応策を考えないといけませんね!

メールなんかでも、普段何気なく使っていた文字や記号も、受け取る側によっては文字化けして見れない・想定しているものと違う見え方になっていることがあるかもしれないので、これから私も注意して書いていこうと思います。

それでは、また!

コメント