◀Unicode版開発トップへ
  • 950 Commit報告:(New/Imp)CESU-8のサポート+α
    • 951 Re:Commit報告:(New/Imp)CESU-8のサポート+α
      • 954 Re2:Commit報告:(New/Imp)CESU-8のサポート+α
        • 955 Re3:Commit報告:(New/Imp)CESU-8のサポート+α
          • 958 Re4:Commit報告:(New/Imp)CESU-8のサポート+α
    • 952 Re:Commit報告:(New/Imp)CESU-8のサポート+α
      • 960 Re2:Commit報告:(New/Imp)CESU-8のサポート+α
    • 965 【副作用】カーソル位置復元が機能しない
  • [950] Commit報告:(New/Imp)CESU-8のサポート+α ラスティブ 2009年06月17日 11:55

    リビジョン:
     rev1587

    変更種別:
     新機能・改善

    内容:
    New:CESU-8のサポート
    Imp:EUC-JP 誤判別対策
    New:デフォルト文字コードを設定できるように

    パッチ名:
    CESU-8のサポート+α ID:2795994
    • [951] Re:Commit報告:(New/Imp)CESU-8のサポート+α ryoji 2009年06月18日 00:19

      SJIS/EUCは「デフォルト文字コード」の中だけにあり、
      UTF-8/CESU-8は「自動判別時にCESU-8を優先する」にもあるのですが、
      これはどういった理由でこうなったのでしょうか。
      例えば、デフォルト文字コードでUTF-8を選択し、自動判別時にCESU-8を優先するように設定しておくと、UTF-8が採用されるのはどんなときで、CESU-8が採用されるのはどんなときですか?
      デフォルトとは何で優先順位とは何?(それぞれの意味を曖昧にせず明確にお願いします)
      • [954] Re2:Commit報告:(New/Imp)CESU-8のサポート+α ラスティブ 2009年06月18日 10:29

        返信ありがとうございます。

        ◆デフォルトとは

         たとえば半角英数字ばかりのファイルの場合を考えると、
        文字コードが検出されない(第一候補に挙がった
        文字コード検査結果が、ポイント数0)ため、
        候補に挙がる文字コードは以下の文字コードになります。

          SJIS,EUC,UTF-8,CESU-8,JIS

        # UTF-7 は、SetD以外の半角英数字が入ったファイルに対しては、
        # ポイント数をINT_MINにするため、除外しています。

        この時、自動判別器はどれを選択すればいいのか迷います。
         ここで、SJIS がデフォルト文字コードに
        指定されていた場合は、自動判別器が SJIS を
        選します。つまり、デフォルトとは、コードが検出
        されない場合で判別候補が複数挙がった場合の
        既定選択肢、という意味になります。

        ◆優先順位とは

         文字コードが検出された場合(第一候補に挙がった文字コード
        検査結果が、不正バイト数が検査データの0.05パーセント未満で、
        ポイント数が1以上の場合)で、かつ、同ポイントの文字コードが
        第2候補 第3候補に挙がっている場合、ケースバイケースの
        優先順位でこうほをしぼっていきます。

         1.SJISとUTF-8またはCESU-8が同ポイントだった場合、
           UTF-8を優先します。これは、CESU-8とUTF-8を
           SJISよりも既定の優先順位を高くすることで対処します。

        # 既定の優先順位とは、CESI::GetIndexById()で決定される、
        # 配列CESI::m_aMbcInfo内の格納位置のことです。
        # 既定の優先順位を高くするとは、配列内の格納位置を
        # 添え字0に近づけるということです。
        # なぜUTF-8を優先するかというと、半角カタカナの影響で、
        # SJISのポイント数が無駄に上がっている場合があるからです。

         2.SJISとEUCが同ポイントだった場合、
           EUC全角文字にEUCひらがなが25%以上含まれている場合、
           EUCを優先し、そうでなければSJISを優先します。

        # 25パーセントというのは適当です。

         3.UTF-8とCESU-8が同ポイントだった場合、
           タイプ別設定にある「自動判別時にCESU-8を優先する」
           オプションにより、どちらを優先するかを決定します。

        (このくらいしか作っていないです… ^^;)

        つまり、優先順位とは、文字コード検査の結果、
        同ポイントになった複数の文字コードのどれを第一候補するかを
        解決する表みたいなものにある優先度のことを指しています。


        > 例えば、デフォルト文字コードでUTF-8を
        > 選択し、自動判別時にCESU-8を優先するように設定して
        > おくと、UTF-8が採用されるのはどんなときで、CESU-8が
        > 採用されるのはどんなときですか?

         UTF-8が採用されるとき: 文字コードが検出されない場合か、
        検出された場合は、UTF-8固有の4バイトコードが見つかった場合で、
        第一候補が明確な場合です。

         CESU-8が採用されるとき: 文字コードが検出された場合で、
        CESU-8とUTF-8が同ポイントで第一候補のときか、
        CESU-8固有の6バイトコードが見つかった場合で、第一候補が明確な場合です。


        このくらいでよろしいでしょうか。。。
        • [955] Re3:Commit報告:(New/Imp)CESU-8のサポート+α ryoji 2009年06月18日 13:20

          > このくらいでよろしいでしょうか。。。
          ありがとうございます。やっと何となく理解できてきました。

          一般ユーザー用(ヘルプ)にはもっと簡潔に説明しないといけませんね。
          以下のような説明で、大筋はあっているでしょうか。

          自動判別のヒントになる固有文字がない場合、「デフォルト文字コード」で指定された文字コードを採用する。
          例)
          ファイル内容
          0x41 : A
          0x42 : B
          0x43 : C
          のようにANSI半角英数字のみだった場合、「デフォルト文字コード」にUTF-8が選択されていればUTF-8とする。

          自動判別のヒントになる固有文字があり、かつUTF-8/CESU-8のどちらかに絞れた場合には「自動判別時にCESU-8を優先する」オプションに従ってどちらかを採用する。
          例)
          ファイル内容
          0xe3 0x81 0x82 : あ
          0xe3 0x81 0x84 : い
          0xe3 0x81 0x86 : う
          のようにUTF-8/CESU-8の区別がつかない場合、「自動判別時にCESU-8を優先する」がONならCESU-8とする。
          • [958] Re4:Commit報告:(New/Imp)CESU-8のサポート+α ラスティブ 2009年06月19日 19:12

            返信ありがとうございます。

            ▼ ryojiさん
            > 自動判別のヒントになる固有文字がない場合、「デフォルト文字コード」で指定された文字コードを採用する。
            > 例)
            > ファイル内容
            > 0x41 : A
            > 0x42 : B
            > 0x43 : C
            > のようにANSI半角英数字のみだった場合、「デフォルト文字コード」にUTF-8が選択されていればUTF-8とする。
            >
            > 自動判別のヒントになる固有文字があり、かつUTF-8/CESU-8のどちらかに絞れた場合には「自動判別時にCESU-8を優先する」オプションに従ってどちらかを採用する。
            > 例)
            > ファイル内容
            > 0xe3 0x81 0x82 : あ
            > 0xe3 0x81 0x84 : い
            > 0xe3 0x81 0x86 : う
            > のようにUTF-8/CESU-8の区別がつかない場合、「自動判別時にCESU-8を優先する」がONならCESU-8とする。

            大筋あってます。

            これからできるだけ簡潔に説明できるように心がけます。
    • [952] Re:Commit報告:(New/Imp)CESU-8のサポート+α ryoji 2009年06月18日 00:42

      [タイプ別設定]-[支援]-[文字コード]画面について

      ・各コントロールにニーモニック(ショートカットキー)が割り当てられていません
      ・タブ順が変です(以前から[文字コード]以外にも変なところがあったようですが)
      ・「自動判別時にCESU-8 を優先する」の"に"と"C"の間にはスペースがないのに"8"と"を"の間にはスペースがあります
      ・「自動判別時にCESU-8を優先する」の上下幅が小さいので文字の下が切れています
      ・デフォルト文字コードのコンボボックスの選択文字列が編集可能になっています(CBS_DROPDOWNではなくCBS_DROPDOWNLISTにしてください)

      あと、レイアウトが、

      □自動判別時にCESU-8を優先する
      [SJIS ] をデフォルト文字コードとする

      のようになっていますが、

      デフォルト文字コード: [SJIS ]
      □自動判別時にCESU-8を優先する

      のように上下左右を入れ替えるほうがなんとなく自然な気がします。
      (>>unicode:951のように、設定の意味がわかってなくて言ってますけど)
      • [960] Re2:Commit報告:(New/Imp)CESU-8のサポート+α ryoji 2009年06月20日 00:32

        > ・デフォルト文字コードのコンボボックスの選択文字列が編集可能になっています(CBS_DROPDOWNではなくCBS_DROPDOWNLISTにしてください)

        ちなみに、意図的にキーボード入力でここに変更を加えて設定画面をOKで閉じると、その後、そのタイプ別設定が適用される新しい画面からは文字コードのインデックスが不正になるため、画面上の文字間をカーソル移動するだけでクラッシュ(NULLポインタアクセス)するようになります。
        クラッシュする位置は、CCaret::ShowCaretPosInfo()の中です。(>>unicode:953の修正はこの障害を調べている最中に別件で見つけたものです)
    • [965] 【副作用】カーソル位置復元が機能しない ryoji 2009年06月25日 01:14

      ▼ ラスティブさん
      > New:デフォルト文字コードを設定できるように
      Rev1587(デフォルト文字コード設定)
      から次の問題が発生しています。

      ・開ファイル時のカーソル位置復元が機能しない
      ・「開き直す」でブックマークが解除される

      修正パッチをUPしておきました。
      → PatchUnicode#2811624
      より良い修正方法があれば提案お願いします。