プロが教える店舗&オフィスのセキュリティ対策術

DB(OSはwin2003、DBはmySQL 文字コードはEUC)に対して
CSVファイルをインポート、エクスポートしようとしています。
入出力ファイル(CSVファイル)の文字コードはShift_JISのため、
文字コード変換が必要となってきています。

今、エクスポート(EUC→Shift_JIS)したCSVファイルを、
エクセルで確認すると極一部が文字化けしてしまいます。

そこで質問が4つあります。
1.文字化けは仕方ないことなのでしょうか?
2.文字化けする文字を特定することはできるのでしょうか?
3.エクスポート方法、変換方法によって文字化けする文字は変わってくるのでしょうか?
4.みなさんはこのような文字化けの問題をどのように回避した経験お持ちですか?
  (文字化けは已む無し、文字コードを意地でも統一した、
   文字を特定して特殊文字に置き換えたなどなど)


基本的なことと思いますが、よろしくご教授願います。

 (3.4.はもっと詳細がわからないと何とも言えないかもしれません。
  ご回答頂く為には何を調べればいいのかからも教えてください。
  よろしくお願いします。)

A 回答 (2件)

>> DBはmySQL 文字コードはEUC



>> 1.文字化けは仕方ないことなのでしょうか?

DBがEUCを使用しているとのことなので、IBM拡張文字やNEC拡張文字は既に正しく記憶されていない可能性もあります。この場合は、既にデータ自体が正常では無いものを含んでいるので、‘仕方ない’でしょう。
含んでいないなら、何とかなります。

>> 2.文字化けする文字を特定することはできるのでしょうか?

一部だけ化けるとのことなので、多くの場合以下の文字でしょう
・シフトJIS:13区の特殊記号
・シフトJIS:115区から119区のIBM拡張文字
・シフトJIS:89区から92区のNEC選定IBM拡張文字
・他にユーザ定義文字領域
実際これらの文字を使って試せば分かります

>> 3.エクスポート方法、変換方法によって文字化けする文字は変わってくるのでしょうか?

変換方法によって変わります。
EUC-JP → Shift_JIS ではなく eucJP-win → SJIS-win
として変換すればwindowsで使用している多くの文字は救われるでしょう。(当然、DB上で既に化けていないことが前提です)

>> 4.みなさんはこのような文字化けの問題をどのように回避した経験お持ちですか?

・DBは、UTF-8を使用する。
・PHPでは、内部コードとして Shift_JISは使用しない。
・Shift-JISな文字の扱いが必要な時は SJIS-win を使う。
・EUCで他の文字セットと変換があるときは、EUC-JPではなく eucJP-winとして扱う。
 
    • good
    • 0
この回答へのお礼

お礼が遅れすいません。
ご回答ありがとうございました。

お礼日時:2008/09/01 20:53

mb_convert_encoding()で変換していますよね?


(株)←の一文字のやつとか~とか、ローマ数字のI~Xの漢字とか
機種依存(コード依存?)文字で引っ掛かったりします。
私の場合エンコードを変える前に別途例外処理を入れるようにしています
基本的には文字化けするたびに別途仕様拡張・・・で十分だと思います。
    • good
    • 0
この回答へのお礼

お礼が遅れすいません。
ご回答ありがとうございました。

お礼日時:2008/09/01 20:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!