Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
Matzにっき(2007-01-03)
[go: Go Back, main page]

«前の日記(2007-01-02) 最新 次の日記(2007-01-04)» 編集

Matzにっき

<< 2007/01/ 1 1. The Ruby Virtual Machine
2. matzrubyブランチ on Subversion
3. 大当たり
2 1. 一族集合
2. リクルート エンジニア適職フェア
3. フニクリフニクラ
4. Groovy 1.0 is there
3 1. nkf-utf8
4 1. Headius: New JRuby Compiler: Progress Updates
2. ユメのチカラ: マルチプロセッサ向けソフトウェアパラダイムとは?
3. Class Variables
5 1. asahi.com:米共和党、ロムニー氏が大統領選に始動
2. 絶版書籍、ネット閲覧可能に・政府が著作権法改正へ
3. Ruby declared TIOBE's Programming Language of the Year 2006!
4. JJ Club
6 1. スケート
2. 年賀状問題
3. るびま特別編
4. 著作権保護期間の延長問題を考える国民会議 - thinkcopyright.org | 保護期間「延長派」「慎重派」それぞれのワケ
5. eigenclass.org Happy 2007! Ruby mini-contest
6. Origin of Programming Language Names
7. 第4回 関数型言語とオブジェクト指向,およびOCamlの「O」について
7 1. かぜひき
8 1. 冬休み最終日
2. まつもとの弱点
9 1. 仕事初め
2. Ruby に今一番ほしいもの
3. Ruminations of a Programmer: Why I should learn Lisp
4. プログラミング2.0
10 1. セキュリティキャンプ・キャラバン島根
2. Ruby on Rails トレーニングプログラム
3. 打ち合わせ
4. 懇親会
5. あるJava使いの場合 - Javaを学ぶ価値
6. mapとreduce、あるいはマクロ不存在の理由
11 1. 日経Linux 2007年3月号
2. 日経ソフトウエア2007年1月号打ち上げ
3. [言語」XML and J2EE: Commodity Skills
4. jijixi's diary - Ruby の文法的欠陥
12 1. 丸山先生レクチャーシリーズ in 東京 2006-2007
2. 静的/動的言語
3. 2006年「Ruby on Rails」が愛された理由
4. local variables new scoping rule
13 1. 日経Linux 2007年3月号
2. On Ruby: Will rubinius Be An Acceptable Lisp
3. ホワイの(感動的)Rubyガイド
14 1. セミナリー補習
15 1. サン、Fortranに代わる新プログラミング言語をオープンソースに - ZDNet Japan
2. ITmedia エンタープライズ:まつもとゆきひろ−第3回:僕の存在価値はそこにある
3. InfoQ: Ruby Version of Refactoring In the Works
4. Groklaw - BSD - The Dark Horse of Open Source, by Brendan Scott, OS Law
16 1. クレイジーjavac? - 'Kitchen Sink Language'で仕様の試食を楽しもう
2. Steve Jobs はなぜ説得力があるのか
3. IBM 境界を越える: Ajax on Rails - Japan
4. IA32(x86)JITアセンブラ Xbyak
5. スライド
17 1. 第6回 OCamlの「モジュール・システム」
2. 出張
3. 人材募集
18 1. グーグルのクリス・ディボナ氏:「われわれはプロプライエタリソフトも重視している」 - CNET Japan
19 1. スターティア、独自CMSを「Ruby on Rails」に対応 開発を効率化
2. receiver, name, owner of Method object
20 1. リクルート エンジニア適職フェア 「理想のソフトウェア開発の現場とは?」
2. 『我らクレイジー☆エンジニア主義
21 1. バプテスマ会
22 1. steve dekorte - projects - open source - skipdb
2. なぜ実現しないネット放送--「品質論」唱える既得権益者の本音
3. Ruby Programming - 向Ruby之父学程設計
4. 「賞味期限切れ」のソフトよさらば。ようこそSugarCRMへ - 日本のITは世界を制す!?
5. Fork JavaScript
23 1. OSDLとFSGが合併、Linux Foundationを設立
2. Dynamic Draw
24 1. ALSA、音出ない
2. Lisp:S式の理由
3. Asoby: Aspect-Oriented Programming in Ruby - New Playground for Rubyists 2.0
25 1. ソフトウェア ジャパン2007−社会を変えるイノベーション−
2. mixiのようなSNS開発も夢じゃない?---ニーズウェルがRubyのトレーニング:ITpro
26 1. 帰宅
2. スタイラス紛失
3. 新年会
4. SRFI 89: Optional and named parameters
5. O'Reilly Open Source Convention 2007 July 23-27, 2007 Portland, Oregon
27 1. 画像ビューア絵箱@nekobooks
2. ウェブキャリアでWebエンジニアとしてのキャリアを磨こう
3. セキュリティキャンプ・キャラバン島根
28 1. リアホナ2007年2月号
29 1. 中身の見える言語
2. XML.com: What's New in Prototype 1.5?
30 1. forums.ps2dev.org :: View topic - Ruby on PSP
2. Practical Ruby for System Administration: Books: AndrBen Hamou
3. Open Tech Press | FOSSの理想郷ブラジルにイメージ失墜の危機
31 1. OSS普及には新しい価値観をもった人々がリーダーシップを--日本OSS推進フォーラム
2. Effective Debugging using Dave Thomas' ”Programming Ruby” - evolutionNext WebLog
3. 「松本零士氏 クリエーターの思い」著作権攻防
4. プログラマーの常識を学ぶ前に
5. xruby - Google Code
>>
Dr.Web 予測するアンチウイルス 持ち込み PC 対策でお悩みの方にオススメです。
ウイルス・スパイウェア検査・駆除 用ツール Dr.WEB CureIt! を無償配布中!

2007-01-03 [長年日記]

_ [Ruby] nkf-utf8

手元のcalkiがUTF-8の「》」相当の文字(U+8BB)を含むエントリが文字化けするので、 nkf-utf8のソースを見てみた。 どうも自動判定の優先順位がEUC-JP,SJIS,JIS,UTF-8で固定されていて、 EUCの範囲内に収まる文字列はすべてEUC-JPとみなすことになっている。 で、UTF-8の「》」はEUC-JPの「損」と同じバイト列なのだ。

どうしたものかなあ。入力の文字コードははっきり分からないので ある種の判別と変換は避けられないしなあ。

今後、M17Nを取り込むにあたって もっと賢い自動判別がは必要だろうなあ。自動判別は正しくない判断をする 可能性があるから、なるたけ避けたいと言っても、実用のためには 避けて通れないだろう。

優秀なコード判別アルゴリズムはあるのかな。 Emacsのコード判別は結構賢いな。 上記の「》」と「損」も区別できてるし。

本日のツッコミ(全8件) [ツッコミを入れる]
_ MMX (2007-01-11 10:28)

判定論理の賢さというより、使用テキストのコード種比率の変化に対応なのでは、nkfを使うときに 多いほうに判定しておくと、賢く見える。(Vistaで拡張した漢字を使うには UNICODE が必要。)

_ 成瀬 (2007-01-12 04:13)

えーっと、U+00BB Right-Pointing Double Angle Quotation Mark "\xC2\xBB" ですよね? nkf 的には現在の動作で「正解」だと思います。U+00BB なんかはまだ日本語文でも出てきそうですが、U+00B7 Middle Dot vs 揃 だとか、U+00B8 Cedilla vs 存、U+00BA Masculine Ordinal Indicator vs 尊 などの例を考えればUTF-8が正解とは言えないはずです。。なお、一文字でEUCやSJISとUTF-8が被る範囲は U+0080-U+07FF が考えられここにはラテンギリシャキリル等々の文字が収められているわけですが、一方のEUCはJIS第一水準等、どちらをnkfが優先するべきかは明らかかと思います。もっとも、複数文字からなる文字列で、U+BBが入っているだけで誤判定するならばバグだと言えるので、その場合は話が別ですが。
ちなみに、いわゆる半角カナのSJIS「ネコ」とEUCの「蛤」も同じ "\xC8\xBA" になりますが、これもEUCに倒しておいた方が妥当であろうという判断をしています。その他、判断つかないパターンをいくつか検討した結果、どのようなケースでもEUC>SJIS>JIS>UTF-8の優先順位が一番妥当な結論を導けるという判断に至り、現在のようになっています。(Shift_JIS-2004とUTF-8ではUTF-8とした方が妥当と思われるケースがあるが、Shift_JIS-2004は自動判定の対象外)
なお、Emacsは片っ端からiconvにつっこんで、最初にエラーの出なかったものでFAを出すという仕様だった様に記憶しています。
あるべき論になると、弾さんの仰るとおり、わからんものはわからんと返すべきでしょう。encodingを候補として渡し、iconvにつっこんでvalidなもののリストを返すあたりに落ち着きそうな気がします。それ以外の方法はある条件下で精度がいいように見えても、それはたまたまおいている暗黙の過程がテストと相性がよかっただけ、の可能性が高いかと。
蛇足ながらcalkiに関して申しますと、入力のエンコーディングはわかっているのだから自動判別にせずに明示的に指定すべき、の一言です。今は亡きBSDマガジンに弾さんが書いていましたが「Guessは下衆なもの」なわけで、そんなものに無闇に頼るべきではありません。

_ まつもと (2007-01-13 02:02)

エントリに書いたことだけでは伝わらなかったかもしれませんが、変換しようとしたものは「損」一文字ではなくて、英語の文章に「》」が含まれたものです。なんか英文ブログのタイトルによく「》」って使われてるんですよね。

で、別に無茶を要求してるわけではなくて

  * コード推定の優先順位を指定したい
  * 推定候補が複数ある時にはそれらを知る方法が欲しい

ってことなんだと思います。エントリを書いた時点では自分でもよく分かってなかったんだけど。

で、最後に入力のエンコーディングについてだけど、form/x-url-encodingでPOSTされた文字列のエンコーディング情報って、どうやって得るんでしょうね。ブラウザから来る情報にcharset指定とかついてないですし。素人臭い質問で申し訳ないけど、ほんとに素人なんで。

_ 成瀬 (2007-01-14 20:09)

一応英文かなーとも思っていましたが、英文の中に漢字だけでもまだ弱いかなという感はありますね。EUC「大量のASCII+漢字 ひらがな無」 vs UTF-8「大量のASCII+記号」だと英文であろうとみなして後者かなぁとも思いますが、タイトルのように数十文字程度だと「英文」とみなせないだろうなぁ・・・。
優先順位の指定ですが実際に使ってみると、UTF-8のblogのタイトルとEUCなtDiaryのタイトルどちらを優先するか等で思ったよりも機能しないケースが多い気はします。U+00BBのようなケースを別途のコードで特別扱いした方が機能するかなと。
候補複数はどうなんでしょうね。NKFでも一応可能にはなっていますが、APIをどうつっこむか悩んで結局手付かずになってます。
form/x-url-encodingでPOSTされた文字列のエンコーディング情報は、送信のcontent-typeに書いてあることもあります・・・が、多くの場合はないです。
ただ、多くの場合その文字列を送ってくるフォームのあるHTMLのエンコーディングは知っており、ブラウザは多くの場いい、そのHTMLのエンコーディングで送信してきます。つまり、受け取るデータ自体にはエンコーディング情報がなくても、たいていはエンコーディングはわかっている、と。

_ まつもと (2007-01-16 08:41)

普通のフォームならエンコーディングが分かっているで済むのですが、今回問題にしているのはブックマークレットなので、元のページのエンコーディングがなにかを知る方法はなさそうです。
せめてUTF-8優先のguessができると良いのですが。
iconvで明示的に変換するしかないのかな。

_ Gimite (2007-01-16 18:05)

Firefoxではdocument.characterSet、IEではdocument.charsetで文字コード名が取れるようです。これをブックマークレットのソースに仕込んでおくというのはどうでしょうか。

_ まつもと (2007-01-16 23:40)

Gimiteさん、
情報ありがとうございます。
いただいた情報をもとにcalkiをハックしました。
なんとかなっているようです。感謝。

_ 成瀬 (2007-01-17 03:09)

ブックマークレットならばタイトルを encodeURIComponent(document.title) で渡すようにすれば URL encoding された UTF-8 文字列として決め打ちできるので、それを使う方法もありますかね。
なお、優先順位と不確定時のAPIは検討課題にしておきます。技術的な理由はないので、デザインですかねぇ。あと、NKF.guessがすでにあるので名前をどうするかが最大の問題かもしれません。
あと、エントリを判定できなかったケースってU+00BBだけですか?他のケースもあれば教えていただきたいです。また、U+00BBの場合の具体例をいくつかいただけると、何かしらあがく余地が見つかるかもしれません。

お名前:
E-mail:
コメント:
本日のリンク元
検索

«前の日記(2007-01-02) 最新 次の日記(2007-01-04)» 編集

RSS feed meter for http://www.rubyist.net/~matz/ Creative Commons License This work is licensed under a Creative Commons License.