◀Unicode版開発トップへ
  • 391 Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示
    • 394 Re:Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示
      • 395 Re2:Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示
    • 396 Re:Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示
      • 412 Re2:Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示
        • 413 Re3:Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示
          • 415 Re4:Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示
            • 426 Re5:Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示
              • 428 Re6:Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示
                • 430 Re7:Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示
                  • 431 Re8:Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示
                    • 441 Re9:Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示
                  • 434 Re8:Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示
                  • 1101 Re8:Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示
  • [391] Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示 kobake 2008年05月10日 20:10

    リビジョン:
     rev1334

    変更種別:
     機能追加。

    内容:
     ファイル保存時に文字情報が失われる場合は、その確認メッセージを出すようにしました。

    前々からこの機能は入れたつもりでしたが、ちゃんと働いていなかったので、
    働くように修正しました。
    • [394] Re:Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示 Uchi 2008年05月11日 07:16

      ▼ kobakeさん
      > リビジョン:
      >  rev1334
      >
      > 変更種別:
      >  機能追加。
      >
      > 内容:
      >  ファイル保存時に文字情報が失われる場合は、その確認メッセージを出すようにしました。
      >
      > 前々からこの機能は入れたつもりでしたが、ちゃんと働いていなかったので、
      > 働くように修正しました。
      >> 4) 『共通設定』の『ファイル』の『ファイルの排他制御』で『他プロセスから読み書きを禁止する』を選択し、『バックアップ』の『保存時にバックアップを作成する』にすると
      >> 上書き保存時、「バックアップの作成に失敗しました.元ファイルへの上書きを継続しますか.」のメッセージが表示される。
      >> 1) Grep で『ファイル毎』を指定した結果の『ファイル名』(行ではなく)をダブルクリックすると、ディレクトリ指定部が重複したファイルを開こうとし、
      >> 上記ファイル名は不正です。…
      >> のエラーメッセージが表示されます。
      >> (行のダブルクリックはOKです)
      以上3点修正されていることを確認しました。

      で、要望なのですが、読み込み時に文字情報が失われる場合もメッセージを出してほしいです。
      もっといいのは不正なシーケンスがあっても書き込み時に戻してくれるのが良いのですけれど
      • [395] Re2:Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示 kobake 2008年05月11日 15:29

        ご確認ありがとうございます。

        ▼ Uchiさん
        > で、要望なのですが、読み込み時に文字情報が失われる場合もメッセージを出してほしいです。

        統合までに実装予定です。
        (文字コードにあんまり詳しくないので、皆さんの力をお借りするかもしれません)

        > もっといいのは不正なシーケンスがあっても書き込み時に戻してくれるのが良いのですけれど

        もし自分が作業するとしたら、統合後の余裕のあるときに実装するかもしれません。


        #以下、設計に関するぼやき#

        Uchiさんが提案された後者の機能(以下、機能B)を実装するためには、
        文書に付加データを付ける形で実装する(ほうが、自分的には実装が楽だと思う)形になると思います。

        今の時点で、文書データ内に付加データを付ける場面が
        ・ブックマーク情報
        ・DIFF情報
        などで、あります。

        付加データを文字通り「付加的に」付けることができるフレームワークができていれば良かったのですが、今の時点では、まだ構造のコアな部分に、付加情報が食い込んでいる状態です。新たに付加情報を付けようとする場合、上で挙げた例と同様に、コアな部分に新データを食い込ませることになります。結果、設計は汚れます。

        上のような事情があるので、機能Bの実装作業は、該当フレームワークの構築を済ませてから、になるかと思います(該当フレームワークの構築は、ときどき進めてはいます)。
        もちろん、該当フレームワークを使わない、別の形の美しい実装はありますが、いちいち機能毎に頭を捻るよりは、手軽に利用できるフレームワークがあって、それを利用できるなら利用したほうが、手間的にも、安定度的にも、レビュー観点的にも、保守性的にも、好ましい、と自分は考えています。
    • [396] Re:Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示 kobake 2008年05月11日 15:55

      > 内容:
      >  ファイル保存時に文字情報が失われる場合は、その確認メッセージを出すようにしました。
      >
      > 前々からこの機能は入れたつもりでしたが、ちゃんと働いていなかったので、
      > 働くように修正しました。

      すみません、上記機能ですが、不足がありました。SJIS保存時しか対応してなかったです…。

      保存時の文字コード変換は各種文字コードクラス (CShiftJisなどの、CCodeBase派生クラス) の UnicodeToCode() で行っているのですが、文字コード変換に失敗した場合は RESULT_LOSESOME を返すのが正しいです。
      で、その RESULT_LOSESOME を返す、という実装が CShiftJis でしか行ってなかったです…。

      申し訳ありませんが、以下のクラスについて、UnicodeToCode 戻り値の対応ができる方がおりましたら、作業お願いできますでしょうか。(自分も時間あるときに作業しますが)
      ※対応できたら、チェック (□→■) を入れてください。
      □CEuc
      □CJis
      ■CShiftJis (対応済み)
      ■CUnicode (文字情報は失われようが無いので、対応済み扱い)
      ■CUnicodeBe (文字情報は失われようが無いので、対応済み扱い)
      □CUtf7
      □CUtf8 (文字情報失われない気がしましたが、詳しく知らないので、未対応扱い)
      • [412] Re2:Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示 ラスティブ 2008年05月18日 20:53

        リビジョン:
         rev1345に対して

        内容:
         EUC及びSJISファイル読み込み時に文字情報が失われる場合は
        その確認メッセージを出すようなパッチを作成しました。

        ■CEuc (今回対応)
        □CJis
        ■CShiftJis (今回対応)
        ■CUnicode
        ■CUnicodeBe
        □CUtf7
        □CUtf8

        CCodeBase に変更を入れてしまっていて、不安を感じています。
        >>395 の内容とすり合わせながらレビューを頂けませんでしょうか…。
        • [413] Re3:Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示 ラスティブ 2008年05月18日 20:58

          ▼ ラスティブさん
          > リビジョン:
          >  rev1345に対して
          >
          > 内容:
          >  EUC及びSJISファイル読み込み時に文字情報が失われる場合は
          > その確認メッセージを出すようなパッチを作成しました。
          >
          すみませんアップロードした場所を書き忘れておりました(疲
          PatchUnicode #1966418
          「EUCまたはSJISファイル読み込み時に文字情報が失われたことを検知」

          宜しくお願いいたします。
          • [415] Re4:Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示 Uchi 2008年05月19日 20:59

            ▼ ラスティブさん
            > リビジョン:
            >  rev1345に対して
            >
            > 内容:
            >  EUC及びSJISファイル読み込み時に文字情報が失われる場合は
            > その確認メッセージを出すようなパッチを作成しました。

            取り急ぎ、実行してのレビューのみさせていただきます。
            >
            > ■CEuc (今回対応)
            × リーディングバイトと次のバイトの組み合わせの問題はチェックできているが
            JISで未定義の箇所が×
            > □CJis
            > ■CShiftJis (今回対応)
            × EUCと同じ
            > ■CUnicode
            × 奇数サイズのファイルが壊れる
            > ■CUnicodeBe
            × 同上
            > □CUtf7
            > □CUtf8
            私もコードを書こうとしたのですが、上記のところがきれいに書けず、挫折していました。

            JIS、UTF7に関しては、仕様上逆変換が一意に定まらないので、シーケンスが正しいかのチェックのみになると思います。

            以上参考にしてください。
            • [426] Re5:Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示 ラスティブ 2008年05月22日 23:20

              アップしました。
              PatchUnicode #1966418
              「ファイル読み込み時に文字情報が失われたことを検知」

              ■CEuc
              > リーディングバイトと次のバイトの組み合わせの問題は
              > チェックできているが、JISで未定義の箇所が×
              変換関数の戻り値が確認できていなかったので、
              確認してエラー処理をさせるようにしました。
              □CJis
              ■CShiftJis
              □CUnicode (奇数サイズのファイルが壊れる)
              □CUnicodeBe (同上)
              ■CUtf7
              ■CUtf8
              新たに作り足しました。
              UTF-7の書き込み関数の方も整理し書き直しました。

              原作者様のものを元にして、
              Base64エンコーダー/デコーダーの実行部分を
              CBase64.h, CBase64.cpp に備え付けました。一応報告です。

              UTF-7 の読み込みエラーでは、紆余曲折の結果、
              '.'と'?'ではなく、置換文字'?'とべた書きを使う事にしました…。

              「JISで未定義の箇所が×」のところのレビューを、
              宜しくお願いいたします。
              • [428] Re6:Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示 Uchi 2008年05月24日 00:03

                ▼ ラスティブさん
                > ■CEuc
                > > リーディングバイトと次のバイトの組み合わせの問題は
                > > チェックできているが、JISで未定義の箇所が×
                > 変換関数の戻り値が確認できていなかったので、
                > 確認してエラー処理をさせるようにしました。
                ×
                > □CJis
                > ■CShiftJis
                ×
                > □CUnicode (奇数サイズのファイルが壊れる)
                > □CUnicodeBe (同上)
                > ■CUtf7
                ○?
                > ■CUtf8
                エラーチェックは○
                CESU-8(サロゲートペアを一連のコード(4byte)では無く2文字(3Byte×2)として扱うコード)が読めなくなりました。

                CEuc、CShiftJisのJISで未定義の箇所をチェックしているところがソース上見当たらないのですが?

                取り急ぎチェックしてみました。
                参考にしてください。
                • [430] Re7:Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示 ラスティブ 2008年05月24日 19:50

                  ▼Uchiさん

                   毎度毎度レビューありがとうございますっ

                  > CESU-8(サロゲートペアを一連のコード(4byte)では無く
                  > 2文字(3Byte×2)として扱うコード)が読めなくなりました。

                   CESU-8とは、初耳です…
                  調べてみましたが、UTF-8とCESU-8は別のコード体系として
                  取り扱った方が安全だとも思います。
                  しかし検査基準を緩くする事で簡単に解消でそうですし…
                  そうした方がよろしいでしょうか?

                  > CEuc、CShiftJisのJISで未定義の箇所をチェックしている
                  > ところがソース上見当たらないのですが?

                   変換処理最終のMultiByteToWideCharの
                  エラーを拾うだけで未定義文字の箇所の変換チェックは
                  大丈夫だろうと軽く考えて、エラーチェックを施したのですが…

                  JIS未定義の箇所とは、機種依存文字などのことでしょうか?
                  • [431] Re8:Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示 ラスティブ 2008年05月24日 20:48

                    ▼ ラスティブさん
                    > ▼Uchiさん
                    > > CEuc、CShiftJisのJISで未定義の箇所をチェックしている
                    > > ところがソース上見当たらないのですが?
                    >
                    >  変換処理最終のMultiByteToWideCharの
                    > エラーを拾うだけで未定義文字の箇所の変換チェックは
                    > 大丈夫だろうと軽く考えて、エラーチェックを施したのですが…

                    #include <stdio.h>
                    #include <windows.h>
                    const char test_data[] = { 0x81, 0xae };
                    int main()
                    {
                    wchar_t result[16];
                    int ret = MultiByteToWideChar(
                    932, MB_ERROR_INVALID_CHARS, test_data, 2, result, 16 );
                    // int ret = MultiByteToWideChar(
                    932, 0, test_data, 2, result, 16 );
                    printf( "ret=%d", ret );
                    return 0;
                    }

                     試してみました。機種依存文字などのことじゃないですねorz.
                     MB_ERROR_INVALID_CHARS フラグはMSDNによると
                    Win2000 SP4, WinXP and later で…という問題ですね。

                     出来るかどうかはともかく(^^;
                    了解しました。
                    • [441] Re9:Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示 ラスティブ 2008年05月25日 15:21

                      ▼ ラスティブさん
                      > ▼ ラスティブさん
                      > ・・・・
                      > 932, MB_ERROR_INVALID_CHARS, test_data, 2, result, 16 );
                      > ・・・・
                      >  MB_ERROR_INVALID_CHARS フラグはMSDNによると

                      MB_ERROR_INVALID_CHARS のところは、
                      MB_ERR_INVALID_CHARS の誤りでした。
                      この記事を持って訂正します。

                      連続投稿すみません。
                  • [434] Re8:Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示 Uchi 2008年05月25日 01:35

                    ▼ ラスティブさん
                    >  CESU-8とは、初耳です…
                    > 調べてみましたが、UTF-8とCESU-8は別のコード体系として
                    > 取り扱った方が安全だとも思います。
                    > しかし検査基準を緩くする事で簡単に解消でそうですし…
                    > そうした方がよろしいでしょうか?
                    CESU-8はOracleが勝手に作った文字コードなわけですが、相手が相手だけに、また対応のしやすさでそれなりに(UTF-8として)流通しているようです。
                    パッチ前のバージョンでは読めていたので一応あげておきました。
                    WinXpのメモ帳でも読めるようです。
                    私の考えでは、読み込んでエラーメッセージを出すあたりが妥当かと思います。
                  • [1101] Re8:Commit報告:(Chg) ファイル保存時に文字情報が失われる警告を表示 gigreeswery 2010年01月11日 05:37

                    55