2011年09月05日

再び、三度、いや四度?文字コードで悩む

しばらくはネタ切れするだろうと思ってましたが、そうもいかなかったようです。
L----Noteのバージョンアップ作業をしていたのですが、最大の問題であった文字コードが不明なファイルの読み込み時における文字コードの問題でひっかかりました。


文字化けせずに文字コード不明のテキストファイルを読み込むのは、かなり難しい割りにググっても情報が出てこないように思います。
以前に検討した方法としては
1.UniversalChardet
(http://code.google.com/p/juniversalchardet/)を使う
2.UniversalChardetを使ったSkyArts.com(
http://skyarts.com/blog/jp/skyarts/)さんが公開されているサービスUniversalChardet Service(http://www.skyarts.com/japan/products/android/ucd/index.html)を使わせていただく
3.他の方法を探す
などがありました。

UniversalChardetを使うというのがベストな選択肢だとは思うのですが、ソースコードの公開が前提らしいので、秘密と言うことではなくあまりに幼稚なコードを書いているので恥ずかしくて今のところ使用できません。(笑)
UniversalChardet Serviceを使わせていただくという方法は、ユーザーに別アプリをインストールしてもらうというのが、うーん……なんとなく気が進まないのです。
そして、今回L----Noteのバージョンアップ作業に取り掛かった時、ふと「文字コードの自動認識が難しければ、手動で選択してもらえばいいじゃん!」と、さも冴えたアイディアであるかのごとく思いつきました。
実際にダイアログを出し、そこでプレビュー表示し、化けていたらユーザーに再読み込みしてもらうように作りあげて、さああとはテストだけだ!と思って良く考えたら、「文字化けってアルファベットオンリーだったら起こらない(?)」んですよね?
解釈が正しいかどうか分かりませんが(どう表現して良いかも分からなかった)、もしプレビューする部分が英文、もしくは内容全部英文の文書だった場合文字化けしているかどうか必ずしも目視できないという事実が素人のアカサカハ、違った……浅ハカサで思いつきませんでした。(素人以前にバカ?)

そんなわけで結局振り出しに戻り、2〜3日悩んでいましたが、とある方法(サイトを特定されないよう書けませんが)をサンプルコードと共に記載されているサイトにたどり着き、「コレだっ!」と思いました。その方法だとUTF-8とShift-JIS、UTF-16はうまく自動認識してくれるようだったので、いい感じでした。
その時思ったのは、どうしてこういう方法を自力で考えつくのだろう?人間の脳みそというのは、どうしてこうも差が生まれてしまうのだろうということです。(OSとかコンパイラを開発する人たちとか、どういう頭の構造だろうと思ってしまいます)
やれやれ、もう出だしから素性が違っているんだろうから、早くプログラミングなんて足を洗った方がいいな、と感じました。

それはそれとして、そこにあったサンプルコードをほぼ真似していろいろ試したのですが、ISO2022-JPが正しく動作しなかったのと、指定した文字コード以外のファイルを読み込むと誤判定したままエラーにならないという問題がありました。
UTF-8とShift-JISさえ押さえれば大体大丈夫だろうと思ったのですが、やはりユーザーが(文字コードという言葉自体を知らない人がそんなことをするとも思えませんが)特殊な文字コードのファイルを読み込ませた場合エラーにできないのは気になりました。そのため、自力で(というか主にググって)回避方法を探しましたが、見つからず。

そんな中、思いあまってとうとうコメント欄を通じてそのサイトに質問してみるという愚挙を犯してしまったのです。まあ「お前のようなトウシロが質問すんじゃねえ!おととい来やがれっ!」だったら、掲示板などでよく見かけるのでまだ予測の範囲内だったのですが、予想外の対応をされてしまい、先方にも不快感を与えてしまったかも知れませんが、僕としても少々傷つく結果となりました。書き込む内容は充分気をつけていたつもりですし、どの辺りが不愉快だったかイマイチ不明ですが、まあ、そうですよね。分かんないヤツはプログラミングなんかするんじゃねえ!の世界ですよね(※誤解でした。コメント欄ご参照ください)

それは確かにその通りなので、先方には謝罪の上サンプルコードは使わないこととしました。
さて、そうなるとL----Noteのバージョンアップに重大な支障が生じた(?)こととなり、やっぱりすべてを放り出してやめちゃおうかな?という心折れた状態の今日この頃です……

posted by 白虹 at 22:00| Comment(3) | TrackBack(0) | Android開発
この記事へのコメント
こんにちは。質問の書き込みをして頂いたブログの者です。
私のサイトには、全然書込みがありません。なので、書込みの有無を確認していませんでした。たまたま確認したところ、第1番目と第2番目の書き込みは削除された後であり、第3番目の書き込みが書かれてあり、それを読むと「削除してください」という趣旨だったので削除してしまいました。私はBloggerの使い方自体、使い慣れていませんでした。結果的にshironijiさんの質問を無視する形になり申し訳ありませんでした。ホームページアドレス欄のURLに「変換エラーが発生しなくても、誤って変換する場合がある」に追記しておきました。ただし、shironijiさんの問題解決にはなっていません。
私がshironijiさんの立場であれば、WINDOWS-125xやUTF32の変換は利用者の責任で行って頂きます。そのような趣旨を取扱説明書に書いておけば問題は解決します。相手も分かってくれるはずです。そのような文字コードを取り扱える人は、コード変換を自分で行えるかもしれません。
共に学習をしていく仲間です。今後とも情報交換をしていきましょう。
Posted by androyer at 2011年09月07日 05:56
こんばんは。
朝コメントを拝見してから動揺しまくりなのですが、この度はどうもご迷惑をおかけしました。
これまでに私が使ってきたブログシステムはすべて、コメントが書き込まれると同時に管理者にメールが飛ぶようになっていたので、blogger(はコメント投稿のために初めてユーザー登録をしたので使用経験がありません)でも同様にコメントをリアルタイムで把握されているはずだと思っていたのですが、早とちりだったようです。申し訳ありませんでした。

自分にとってどちらかというと辛いことの多いプログラム作成作業において、私は頻繁に愚痴りたくなるために勢いで始めたこのブログです。今回もその流れでエントリーをあげてしまいました。ご迷惑をかけないようにサイトを特定されないように書いていたのですが、今回のこの記事は消した方が良いでしょうか?
そうすると誤解であったということも一緒に消えてしまうので、このままの方が良いかも知れません。自分としては迷うところです。
ご希望があれば従わせていただきますので、ご指示いただければ幸いです。

なお、記事の追記の件及び特殊な文字コードの取扱に関するアドバイス、ありがとうございました。了解いたしました。
ただ、共に学習をしていく仲間とは恐れ多いことです。例えれば太陽と冥王星(私)くらいの埋まらない差があるので、ただただ参考にさせていただくだけです。
この度はわざわざ当ブログに経緯をお書きいただき、重ねてお礼申し上げます。

(しかし、なぜこの「壊滅日誌」を見つけられたのかビックリしました)
Posted by 白虹 at 2011年09月07日 21:41
LGPLってライブラリ本体に手を加えない限りソースコードの公開いらないのでは?
Posted by at 2014年01月01日 14:45
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/47756338

この記事へのトラックバック