◀ANSI版開発トップへ
  • 2382 EUC変換ミス?
    • 2383 RE: EUC変換ミス?
    • 2384 Re: EUC変換ミス?
      • 2385 Re2: EUC変換ミス?
        • 2386 Re3: EUC変換ミス?
        • 2387 Re3: EUC変換ミス?
          • 2388 Re4: EUC変換ミス?
            • 2398 Re5: EUC変換ミス?
              • 2403 Re6: EUC変換ミス?
  • [2382] EUC変換ミス? BrainOfKeios 2002年10月03日 09:26

    えっと~仕様なのかもしれませんが、
    Windows XPでSAKURA 1.3.2.4 を使った場合、
    「鄕」「髙」の漢字を含んだ文章をEUCで保存すると
    下記のような文字化けが起こるのですが・・・
    皛<= 鄕
    鄕<= 髙
    • [2383] RE: EUC変換ミス? すい 2002年10月03日 12:58

      それ以前に、そもそもそんな文字 JIS や EUC にありましたっけ?
      確かその漢字がある領域(FA40~FC4B)は Shift_JIS の特殊な領域、それも
      MSゴシックや MS明朝 独自の漢字だから MS-DOS やなんかですら表示
      できない文字のはずだし。

      確か JIS にも無いから E-Mail やなんかでも送れないことが多く、
      「インターネット関連では使うなや」って感じな漢字だったような。

      Unicode なら、その漢字あるみたいですけど。
    • [2384] Re: EUC変換ミス? げんた 2002年10月03日 13:27

      >「鄕」「髙」の漢字を含んだ文章をEUCで保存すると
      jis/sjis変換に使っている _mbcjistojms() が対応していないのだと思います.
      これらの文字はIBM拡張漢字と言われているもので,単純なコード変換以上のことをやらないといけないみたいです.

      鄕が皛に化けるのをもっと詳細に見ると,IBM拡張漢字(fb73)ではなくNEC拡張文字(ee57)の皛になります.気を利かせたつもりでどこか抜けているのか.

      #ということをわかっていて「仕様かもしれない」と書いたのかしら.
      • [2385] Re2: EUC変換ミス? すい 2002年10月03日 18:08

        >jis/sjis変換に使っている _mbcjistojms() が対応していないのだと思います.
        >これらの文字はIBM拡張漢字と言われているもので,単純なコード変換以上のことをやらないといけないみたいです.
        >
        >鄕が皛に化けるのをもっと詳細に見ると,IBM拡張漢字(fb73)ではなくNEC拡張文字(ee57)の皛になります.気を利かせたつもりでどこか抜けているのか.

        fa40~fc4b の領域って単純なコード変換処理で JIS に変換すると漢字として
        認められないような領域になってしまうような領域だったような?(違うかも)

        で、そういった類の事を一切何も考えずに、単純に機械的にコード変換処理しちゃう
        から、こういう化け方をするのかと。

        Shift_JIS で fa40~fc4b の範囲の文字なら ed40~eefc または 8754~879a の文字に
        変換↓してから JIS や EUC に変換するようにすれば、見た目上は問題は解決すると思いますが。

        |ⅰ (fa40)→ ⅰ (eeef)
        |ⅱ (fa41)→ ⅱ (eef0)
        |.
        |Ⅰ (fa4a)→ Ⅰ (8754)
        |Ⅱ (fa4b)→ Ⅱ (8755)
        |.
        |纊 (fa5c)→ 纊 (ed40)
        |褜 (fa5d)→ 褜 (ed41)
        |.
        |鄕 (fbb8)→ 鄕 (ee9c)
        |.
        |髙 (fbfc)→ 髙 (eee0)
        |.
        |.
        |黑 (fc4b)→ 黑 (eeec)

        ただその場合、Shift_JIS → EUC → Shift_JIS の順に変換すると勝手に文字コードが
        “fa40~fc4bの領域の文字” → “ed40~eefcの領域の文字”に変わっちゃう
        (元に戻らない)事になりますけど良いのかな?
        どうなんでしょう?
        • [2386] Re3: EUC変換ミス? すい 2002年10月03日 18:56

          >fa40~fc4b の領域って単純なコード変換処理で JIS に変換すると漢字として
          >認められないような領域になってしまうような領域だったような?(違うかも)

          違いました。

          よく確認してみたら、
          「 fa40~fc4b の領域の漢字は Shift_JIS → EUC 変換処理にかけても EUC に変換されない」
          んですね。Shift_JIS のまんまです。

          で、その変換されていない Shift_JIS の fa40~fc4b のままの漢字を EUC と
          みなして開くから、結果として化ける。そりゃ化けますわぃ。
          Shift_JIS のままの文字を強制的に EUC とみなして開こうとしているんですから。

          逆に言うと、つまり“この領域の文字は EUC に変換不可能な領域”という事でしょうか?
          やはり変換処理しないと駄目っぽいですね。
        • [2387] Re3: EUC変換ミス? すい 2002年10月03日 21:30

          >Shift_JIS で fa40~fc4b の範囲の文字なら ed40~eefc または 8754~879a の文字に
          >変換↓してから JIS や EUC に変換するようにすれば、見た目上は問題は解決すると思いますが。

          もし、この変換処理をやるなら↓こんな感じってことで。(小さな関数 1個)
          http://www.egroups.co.jp/files/sakura-editor/Developer/Source/CONV.LZH
          # 対して大きくないんですけど、サイズオーバーでここには書き込めませんでした。(;_;)

          *pszSrc 内の文字列を直接書換えます。

          これを関数名 conv は適当に変えて、sakura_core/CMemory.cpp 中にでもコピーし、
          Shift_JIS → EUC 変換処理、Shift_JIS → JIS 変換処理それぞれの頭の方で呼び出すようにして。。。
          # 例のごとく動作確認は LSI-C でやってます。
          • [2388] Re4: EUC変換ミス? げんた 2002年10月04日 00:48

            ありがとうございました.早速取り込みました.

            行単位の変換を文字単位の変換とし,CMemoryクラスに追加しました.
            • [2398] Re5: EUC変換ミス? すい 2002年10月04日 12:31

              >早速取り込みました.
              すみません、注釈が間違っていました。
              注釈なので、動作には全く影響しないのですが、他の方が後から見たり弄ったり
              するときに混乱しないよう、修正しておいて頂けると幸いです。

              変換部の行末尾、一部、文字コード(数値)の記述が誤っていました。
              ↓矩形の切り貼りで修正願います。
              ----- ここから -----
              /* fa40~fa49 → eeef~eef8 (ⅰ~ⅹ) */
              /* fa4a~fa53 → 8754~875d (Ⅰ~Ⅹ) */
              /* fa54~fa57 → eef9~eefc (¬~") */
              /* ㈱ */
              /* № */
              /* ℡ */
              /* ∵ */
              /* fa5c~fa7e → ed40~ed62 (纊~兊) */
              /* fa80~fa9b → ed63~ed7e (兤~﨏) */
              /* fa9c~fafc → ed80~ede0 (塚~浯) */
              /* fb40~fb5b → ede1~edfc (涖~犱) */
              /* fb5c~fb7e → ee40~ee62 (犾~神) */
              /* fb80~fb9b → ee63~ee7e (祥~蕙) */
              /* fb9c~fbfc → ee80~eee0 (蕫~髙) */
              /* fc40~fc4b → eee1~eeec (髜~黑) */
              ----- ここまで -----

              よろしくお願いします。
              • [2403] Re6: EUC変換ミス? げんた 2002年10月06日 02:57

                >すみません、注釈が間違っていました。
                しまった.1.3.5.1で入れ忘れた.

                今なおしましたので,次回にはちゃんと直ります.