人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

文字化けの修復について

文字化けの修復って、出来るのでしょうか?

ケースによって、「修復出来る場合」と「出来ない場合」があるのでしょうか?

◆環境「PHP」?「MySQL」
◇前回
・「ブラウザ表示」はOK。DB内のみ文字化け(あるいは逆だったかも=「ブラウザ表示」のみ文字化けでDBはOK)
・latin1指定でデータdumpして、utf8変換後DBへ戻したら、文字化け解消した

◇今回
・「ブラウザ表示」「DB」、どちらも文字化け
・前回と全く同じ手順でやろうとしたところ、dumpしたデータが「???」のまま

■質問
・DB保存したデータが文字化けした場合、そのデータは二度と修正出来ない、ことはあり得るのでしょうか?
・あるいは、DBで、「???」となっているデータでも、詳しい人がやれば、必ず復旧できるものなのでしょうか?

また、こういうのはどういう仕組みになっているのでしょうか?
▽文字化けして読めない文書を解読できる「もじばけらった」 - GIGAZINE
http://gigazine.net/news/20120225-mojibakeratta/


●質問者: プログラムができない
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● gyoh_k
ベストアンサー

>・DB保存したデータが文字化けした場合、そのデータは二度と修正出来ない、ことはあり得るのでしょうか?
「今回」のケースのように、おそらくDB保存する前にすでに文字化けている場合は、
修正できないことがあり得ると思います。
「前回」のケースのように、データの保存文字コードとDBの文字コードがあっていないだけであれば
単に表示の際に文字化けているだけなので、データ自体は破損していないため復旧できます。


>・あるいは、DBで、「???」となっているデータでも、詳しい人がやれば、必ず復旧できるものなのでしょうか?
誤った文字コード変換をかける過程で、データ自体が壊れてしまう可能性があるので、
必ず復旧できるとは言えないと思います。
例えば、「?」などのUTF-8にしかない文字を他の文字コードに変換すると、
元のデータは失われてしまいますので、文字コード変換は可逆ではありません。


>また、こういうのはどういう仕組みになっているのでしょうか?
これは単に元の文字列に対して、
mb_convert_encoding($str, "UTF-8", ***)
の組み合わせを色々やっているのではないでしょうか。


もしデータ復旧を試される場合、以下のような手順がよいと思います。
うまくいった場合、所々文字が壊れているかもしれませんが、読める状態まで戻せると思います。
1.
例えばDBの文字コードがlatin1の場合、
mysqldump --default-character-set=latin1
で保存データをダンプします。

2.
nkfなどのツールで、ダンプしたデータに対して、
PHP側で誤変換が起こった逆の変換をかけます。

例えばShift_JISの入力データを、PHPがUTF-8と誤認識してしまい、
mb_convert_encoding()で「UTF-8」->「EUC_JP」の変換をかけていた場合、
nkfで「EUC_JP」->「UTF-8」の変換をかければ、
Shift_JISの元データを(ある程度)復旧できるはずです。


なお、実感としては、元データに対して誤変換が2回以上かかっている場合、
残念ながらうまくいかないことのほうが多いように思います。


プログラムができないさんのコメント
回答ありがとうございました >「今回」のケースのように、おそらくDB保存する前にすでに文字化けている場合は、 >修正できないことがあり得ると思います。 >「前回」のケースのように、データの保存文字コードとDBの文字コードがあっていないだけであれば >単に表示の際に文字化けているだけなので、データ自体は破損していないため復旧できます。 「DB保存の際の文字化け」と、「表示の際の文字化け」では、 同じ文字化けでも、意味が違うことが、よく分かりました。 >元のデータは失われてしまいますので、文字コード変換は可逆ではありません。 なるほど。やっぱりそうなんですね。 >nkfなどのツールで、ダンプしたデータに対して、 >PHP側で誤変換が起こった逆の変換をかけます。 逆の変換をかけるという発想はありませんでした。 参考にさせていただきます。 >Shift_JISの元データを(ある程度)復旧できるはずです。 >なお、実感としては、元データに対して誤変換が2回以上かかっている場合、 >残念ながらうまくいかないことのほうが多いように思います。 情報ありがとうございます。 大変参考になりましたー
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ