お客様からCSVファイルが文字化けすると言われたけど、とても悩んだ。いろいろ聞いてみると、簡単なことだった。
CLIP-MAILというPerlで作られたメールフォームライブラリを使ってフォームに入力した値をCSVファイルに出力している。CSVファイルにある電話番号が文字化けしてしまうという報告があった。
こちらで試してみると、そのような障害が発生していない。正しく値が保存されている。どの行が文字化けしているか教えてくれ、と頼んだらスクリーンショットの画像が送られてきた。
見ると、何とExcelの画面で電話番号が
04512345678
が
451E+09
となっている。
はい、もうわかりますね。ExcelでCSVファイルをそのまま開いた状態でセルの横幅が狭くて「E+n」形式の対数で表示されているだけでした。セルの横幅を広げると数値として表示されます。
これはわからないのは仕方ないと思います。メールのやり取りだけでは、こちらも気が付きませんでした。当たり前にセルの幅を動かしていました。こちらが当たり前と思い込んでいたことで対応が遅れたのは反省です。
CLIP-MAILには入力した項目の型の指定がありませんし、テキストだったらダブルクォーテーションで囲むなんてしていません。Excelで読み込んだときに数字だけの電話番号は数値として判断してしまいます。
この説明で、お客様は納得できるのだろうか・・・。