- PR -

正常な文字と文字化け文字の比較

投稿者投稿内容
下っ端プログラマー
会議室デビュー日: 2005/07/13
投稿数: 7
投稿日時: 2005-09-15 18:13
お世話になります。

「本来なら正しい文字列なんだけど文字化けしているだけ」という事を確認したいのですが、
正常な文字列と文字化けを起こしている文字列を比較して
元々は同じ文字列なのかどうかを判断することは可能でしょうか?

本来来るべき文字列は分かっていて、受け取った文字列が文字化けを起こしている
だけで想定している文字列なら、その文字列を文字化けしていない正常な文字列に
変えて後続処理を行いたいと思っています。

異なるOS間でデータをやり取りするために文字化けを起こすことが考えられます、よろしくお願いします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-09-15 18:24
正しい文字列が分かっていれば
正しい文字列.equals(文字化けしているかもしれない文字列)
で文字化けを起こしているかどうか、は判別できますね。
しかし、元々は同じ文字列なのかどうかを判別するには文字化けしている文字を復元してからでなければ比較できませんから無理な話ではないでしょうか。
たとえば良くある "?" が元々何であったかどうかはわかりません。エンコードする対象の文字セットにない文字列をマップしようと試みて強制的に "?" に変換されてしまったわけですので。非可逆変換されています。

「異なるOS間でデータをやり取りする」というケースを具体的に挙げればまたべつのソリューションがあるかもしれません。

未記入X
大ベテラン
会議室デビュー日: 2005/05/19
投稿数: 136
投稿日時: 2005-09-15 18:29
こんばんは。
引用:

下っ端プログラマーさんの書き込み (2005-09-15 18:13) より:

正常な文字列と文字化けを起こしている文字列を比較して
元々は同じ文字列なのかどうかを判断することは可能でしょうか?


そのような比較をしようとするくらいなら、最初から化けないようにしてしまえば楽だと思います。

文字化けの対処自体はFAQ的な事柄ですのでググってみるのもいいですし、
ここで質問を継続なさるなら、OS、Javaやらアプリケーションサーバのバージョン、化ける前と化けた後がどうなるか等、
「何をどのようにしたら、このような結果になってしまった。本来はこのようにしたい」
という事を書いてみてください。解決の糸口が見えるかもしれません。
下っ端プログラマー
会議室デビュー日: 2005/07/13
投稿数: 7
投稿日時: 2005-09-15 20:18
インギさん、未記入さん回答ありがとうございます。

>インギさん
申し訳ありません、先ほどの質問では要件を満たしていませんでした。
・比較したい文字列は、文字化けしているかもしれないし全然違う文字列の場合もあります。

>未記入さん
やろうとしていることですが、こちらのOSはUNIXですがWindowsからファイルを取得します。(恐らくcsvファイル)
ファイル内の文字列をチェックしてDBに格納いたします。
このとき、ファイルは手作業で用意されているので文字列が想定と違う事もあれば、文字化けを起こしている可能性が想定されています。
文字化けしていなくて正しいデータならDBに格納し、文字化けしていて想定している文字列であれば、想定している文字列をDBに格納し、それ以外ならエラーとしようとしています。

よろしくお願いします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-09-15 20:54
つまり、文字化けする前の情報-オリジナルのファイルが見られる状態にあるということですね?
ちょっと似た質問がありました。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=24384&forum=12&2

いくつかのエディタに実装されているように、十分に検査する対象の文字列が長ければある程度文字コードを判別することができます。

比較的確実なのはCSVファイルの1行目に固定されたヘッダを書いて貰うことです。
想定される文字コードセットで一行だけ読み込んで、想定される文字列になるかどうか判別することでだいたい判別できますね。

もっと確実なのは XML ファイルを用意してもらうことですが・・・
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-09-15 20:54
引用:

下っ端プログラマーさんの書き込み (2005-09-15 20:18) より:
文字化けしていなくて正しいデータならDBに格納し、文字化けしていて想定している文字列であれば、想定している文字列をDBに格納し、それ以外ならエラーとしようとしています。


で結局、あなたに分からないのは上の一文のどの部分ですか?上に書いていることを実装する上で、何が問題になっているのですか?DBへの格納も、想定している文字列との格納も、個々の要素はごく基本的な事ですよね。

もしや、あなた自身でも「想定している文字列」が何か分からないのですか?あなたがどんな文字化けや、どのような文字列を想定しているのか一切説明していない以上、回答できる人なんて居ませんよ。
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2005-09-15 22:58
相手がWindowsってことは、ほとんどShift_JIS系と仮定していいんじゃないかと。
もしからしたら、Shift_JISのバリエーションの問題で文字化けしてるのでは?

JISAutoDetectは多くの場合よろしくないので、Shift_JIS、Windows-31J、CP932等を
試してみるといいと思います。この辺はJREのバージョンによってもマッピング仕様が
変化しているので、化けないエンコーディングを探すのが一番早いと思いますよ。
未記入X
大ベテラン
会議室デビュー日: 2005/05/19
投稿数: 136
投稿日時: 2005-09-16 08:52
具体的に、どの文字を、どうしたら、どういう風に化けたんでしょう?
それが不明のままでは現象(結果)の説明になっていませんよ?
甕星さんも仰っていますが、答えようがないです。

スキルアップ/キャリアアップ(JOB@IT)