EUC_JPの亡霊

LINE@友だち追加でお得な情報をゲット!!
LINE@のアカウントができましたo(≧▽≦)o
↓友だち追加してね↓
友だち追加

文字コード問題、嫌ですよね。
ちょっと古いシステムだと文字コードが「EUC-JP」だったりします。
これを「UTF-8」で扱っても通常は問題は無いのですが、1部の特殊な文字でおかしくなります。
代表的なのが
タカ、ハマ、サキ。
高、浜、崎、それぞれの旧字体。はしごだか、とか言われているやつです。
これらがデータベースに入っていると、例えば、
Select * from ~
のアスタリスクで全レコードを取得した時に、0x8f系のencoding “EUC_JP” has no equivalent in “UTF8”エラーで目出度く失敗します。
一般的な解決方法は、データベースのダンプを取って、文字コード変換処理をしてリストアになるはず。

だけれども。

そんなDBの外側にアクセス出来ない、OSに触れないなんて時もある。
SELECT文で正規表現を使って、とりあえず別の文字にする方法もありますが、僕はそれでは上手くいきませんでした。

超力業としては、作成・更新の時刻のカラムがあるテーブルであれば、徐々に攻めていくなんてのもあります。
WHERE句にて日付を指定しつつ、エラーが起こった周辺で細かく見ていく的な。
件数が少なければ、それもアリでしょう。
今回は16万件ほどだったので・・・普通にムリー。

そもそも、上記のエラーはその特定のアイテムにさえ触れなければ発生しません。
「*」では無く、文字コードが関係していない箇所を選んでセレクトすれば、同じレコードだとしても値を返してくれます。
流石に主キーで文字コード問題は発生…しませんよね?
という事で、こんな風にやってみました。

使うのは勿論、.netです。
仕事ではエクセルを覚えたら、次の順番としてC#もしくはJavaScriptという事には異論無いはず。
これがサラリーマン、あー、今だと色々ややこしいから、ビジネスパーソンとしてあるべき姿。
データベースからデータを取得する方法はいくつかありますが、しょせん1回使って捨てるコードです。
1番簡単で便利な「DataSet」を使いましょう。
EntityFrameworkは、ここではちょっと過剰ですね。

データセットのデザイン画面でクエリを追加し、主キーだけを取得するメソッドを用意します。
後はテーブルから全主キーを取得し(メモリに全乗せするためにtoList()してしまう)、ひたすらForeachで回す。
try句で囲って、その中で改めて、主キーを渡して1行分のデータを取得。
もしそこで文字コードのエラーで出るようなら、例外が発生。
chatchでその主キーを収集しておく。

とりあえず、これで問題のある行だけは特定できるので、そこを修正すればOKです。
やってみたところ、おかしかったのは1レコードのみ。
16万件中のたった1件です。

僕が作ったシステムでは無く、引き継ぎ引き継ぎで流れてきたものなので、そもそも仕様すら把握しておらず。
アチコチのコードを見ながら、ようやく全体像が掴めてきたところ。
ああ、まだまだ先は長そうだな!

これで何とかなる事が分かったので、次に同じ問題が発生しても大丈夫。
レアケースだし、今後は無いだろうけれども…。



JRDV.sp

EUC_JPの亡霊 に関するツイート


ルーカス ルーカス

2 時間
冗談抜きで7時にモーニングコールしてくださいなんでもします

雷更新世 雷更新世

4 時間
返信先: @papyrustapirus @ijh0
ついでに言うと(JISコードや-JPで見て)すべて0ビット目が0→1になっている(化けていない文字は元から1)ので、漢字ROMのアドレス線が1本ショートしてそうですね…。あと他に化けてる字が「ー→―」と「 →!」です。

ふぁみでん ふぁみでん

5 時間
返信先: @DsnMirai
俺お前と馬が合わんからやっぱブロックするわ

☘︎アニレオン☘︎ ☘︎アニレオン☘︎

10 時間
霊感が強くなって見えるようになったことかな〜

レノ@nana民 レノ@nana民

14 時間

ユー@9/23横アリ ユー@9/23横アリ

7月30日
†安さの殿堂†

ぱくち ぱくち

7月30日
よく学校休んでて、来た時はいつもマスクしてるから身体弱い子なのかなって思ってたら、友達から聞いたところ今絶大な人気を誇るSEVENTEENってゆうグループのキムミンギュくんらしい。

にごり@デスチャ にごり@デスチャ

18 時間
無事スレイヤーに🙌 ご協力ありがとうございました❗

ユー@9/23横アリ ユー@9/23横アリ

5 時間
1層無事クリアした

たかやま@教頭 たかやま@教頭

7月30日
しかし、-JPのサーバーでSJISで書かれたPerlをUTF-8のサーバーに移行することの難儀さといったら……。それも他人の書いたモノで、さらにPerl5.8と5.16の差にもやられて……泣きそうだ。

すゞっき すゞっき

18 時間
zishan dsd着弾!! しばらくノーマルで聴き込んでそのあとオペアンプをmuses01か02に変えてみたいと思います!

ふぁみでん ふぁみでん

11 時間
りなーしょが嫌いなあなた、Layerで一緒にりなーしょを煽りませんか?

コーミー コーミー

21 時間
C76C9AEA :参戦ID 参加者募集! Lv120 フラム=グラス

レノ@nana民 レノ@nana民

7月30日

ふぁみでん ふぁみでん

5 時間
DSNをぶっ壊す♪

Girls Clothing (Newborn-5T) Girls Clothing (Newborn-5T)

21 分
(eBay Sponsored) Vtg I LOVE YOUNGSPORT Dress Sz 4 Girls Red Velvet Bodice White Tulle Skirt

ふぁみでん ふぁみでん

5 時間
返信先: @DsnMirai

ふぁみでん ふぁみでん

2 時間
なんやねんこのクソ放置グループ可哀想すぎるやろ

suroisu suroisu

7 時間
文字コード調べるたびに-JPだったりUTF-8だったりで原因がわからず

すゞっき すゞっき

9 時間
音いいなぁwww 操作性良くわないけどまだ許容範囲

おすすめ記事一覧



おすすめ情報




LINE@友だち追加でお得な情報をゲット!!

LINE@のアカウントができましたo(≧▽≦)o
友だち追加でお知らせなど お得な情報を受け取ることができます。
みんな友だちになってね♪

友だち追加は、下記のURLのからどうぞ!!
友だち追加
友だち追加