滑り込みで文字化けの修正
Mercurial の主要なコマンド/エクステンション/ヘルプトピックのメッセージを概ね翻訳し終えた。
今回のリリースでは、新機能としてリビジョン指定言語("hg help revsets")が追加された他に、用語集("hg help glossary")も追加されているため、段落分割で共有されたものが幾つかあるにしても、翻訳対象が随分増えた。
98% 程だった以前の翻訳率と比べると、84% と随分落ちてしまったけど、07/01 リリースまで時間も無いので、とりあえず動作確認&コミットしてしまうことに。
まずは "hg help" でサマリ行の翻訳状況を確認。
有効化されているエクステンション: children 子\203"ェンジセット表示のコマンド graphlog 端末でのリビジョングラフ表示のコマンド mq パッ\203"併用の管理 patchbomb 電子メールによる変更内容パッ\203"送付のコマンド win32text 改行\214"式の自動変換
.... あれ?文字化けしてる。
おかしいなぁ、折り返し処理の文字化けは対処済みの筈なのだが。各コマンドの "hg help" 出力等を確認する限りでも、折り返し部分の問題では無さそうな感じ。
新規の障害?がびーん!公式スケジュール上だと、あと1日ぐらいしか余裕が無いのに! > 1.6 版リリース
とりあえず、呆然としていても問題は解決しないので、地道に条件を絞り込むことに。
ざっと現象を見た限りでは、折り返し問題のような「場所」ではなく、特定の「文字」に限って化けているような印象なので、化けている文字を拾い集めてみた。
「チ」「冒」「形」あたりが化けているみたいなので、これらの文字のバイト列を CP932(Shift_JIS ね) で確認してみると:
- チ: 83 60
- 冒: 96 60
- 形: 8c 60
.... 0x60(`: バッククォート)か!あれ?そういえば文字化けの箇所って:
children 子\203"ェンジセット表示のコマンド graphlog 端末でのリビジョングラフ表示のコマンド mq パッ\203"併用の管理 patchbomb 電子メールによる変更内容パッ\203"送付のコマンド win32text 改行\214"式の自動変換
軒並み2バイト目がダブルクォート(")になってたなぁ ..... あ!わかった!
メッセージ翻訳の際に、「:hg:`command -opt arg`」と記述した部分を「"hg command -opt arg"」と変換する機能が追加されているのに気付いたんだけど、ひょっとしてバイト列中のバッククォートを問答無用でダブルクォートに変換してるのでは? > mercurial/minirst.py
.... 予想通りだった。あー、それは化けるわ@CP932。
ということで、変換処理の中間形式として一旦 unicode 文字列に変換する修正版で早速試してみると、無事文字化けは解消。リリース間際だったので、送付したパッチの取り込み採否を心配してたのだけど、どうやら速やかに取り込まれた模様。
UTF-8 や EUC な環境で確認していたら、危うく気が付かないところだったので、無事水際で食い止めたと言えるけど、そもそもこんなに問題を抱えている符号化方式ってどうよ?
省資源重視な 20 世紀的には、EUC 等と比較した際の「半角カタカナを想定した場合の情報密度の高さ」がメリットだったかもしれないけど、ASCII 文字混在時の処理を考えると、資源豊富な 21 世紀的には欠陥符号化方式な気が > CP932/Shift_JIS
# 「バイト数」=「表示幅カラム数」なところもか? > メリット
でも、最大ユーザベースを抱えるであろう MS-Windows では、ロケール固有符号化を CP932 から変更すると軒並み表示の乱れるプログラムだらけな状況(@自前の Vista 環境)なので、当面は何とか折り合いを付けて行くしかないんだろうなぁ。
ちなみに、Mercurial 1.6 版は予定通り 07/01 にリリースされました。