◀ANSI版開発トップへ
  • 3550 Re: UTF-8文字化け
    • 3551 Re2: UTF-8文字化け(~)
      • 3552 Re3: UTF-8文字化け(~)
        • 3553 Re4: UTF-8文字化け(~)
      • 3555 Re2: UTF-8文字化け(~)
        • 3556 Re3: UTF-8文字化け(~)
  • [3550] Re: UTF-8文字化け じゅうじ 2004年04月25日 21:14

    >>data[3252]2003/10 Re: UTF-8文字化け

    WAVE DASH の問題で、U301C と UFF5E を交換するパッチです。
    Google の検索をしたHTMLソースで、
    「~」記号が使用出来るようになります。

    --- original ~ CMemory.h Wed Jan 01 10:58:18 2003
    +++ CMemory.h Sun Apr 25 20:13:36 2004
    @@ -191,3 +191,4 @@
    static unsigned short _mbcjmstojis_ex( unsigned char* pszSrc );
    -
    +private:
    + static void ExchangeWaveDash( unsigned char* ); /* WAVE DASH を、~と交換。 2004/04/23 じゅうじ */
    };

    --- original ~ CMemory.cpp Tue Apr 13 20:53:16 2004
    +++ CMemory.cpp Sun Apr 25 20:07:00 2004
    @@ -1263,2 +1263,3 @@
    if( 2 == nUNICODEBytes ){
    + ExchangeWaveDash( (unsigned char *)pWork ); /* 2004/04/23 じゅうじ */
    j = wctomb( (char*)&(pDes[k]), ((wchar_t*)pWork)[0] );
    @@ -1290,5 +1291,10 @@

    -
    -
    -
    +/* WAVE DASH を、~と交換。 2004/04/23 じゅうじ */
    +void CMemory::ExchangeWaveDash( unsigned char *pWork )
    +{
    + if(pWork[1] == 0xFF && pWork[0] == 0x5E)
    + pWork[1] = 0x30, pWork[0] = 0x1C;
    + else if(pWork[1] == 0x30 && pWork[0] == 0x1C)
    + pWork[1] = 0xFF, pWork[0] = 0x5E;
    +}

    @@ -2023,2 +2029,3 @@
    j = mbtowc( &wchar, &pBuf[i], nCharChars );
    + ExchangeWaveDash( (unsigned char *)&wchar ); /* 2004/04/23 じゅうじ */
    if( j == -1 || j == 0 ){
    @@ -2060,2 +2067,3 @@
    for( i = 0; i < nBufLen / (int)sizeof( wchar_t ); ++i ){
    + ExchangeWaveDash( (unsigned char *)&pUniBuf[i] ); /* 2004/04/23 じゅうじ */
    j = wctomb( (char*)mbchar, pUniBuf[i] );
    @@ -2071,2 +2079,3 @@
    for( i = 0; i < nBufLen / (int)sizeof( wchar_t ); ++i ){
    + ExchangeWaveDash( (unsigned char *)&pUniBuf[i] ); /* 2004/04/23 じゅうじ */
    j = wctomb( (char*)&(pBufSJIS[k]), pUniBuf[i] );
    @@ -2793,2 +2802,3 @@
    j = mbtowc( &wchar, (const char*)&pBuf[i], nCharChars );
    +// ExchangeWaveDash( (unsigned char *)&wchar ); /* 2004/04/23 じゅうじ */

    @@ -2966,2 +2976,3 @@
    if( 2 == nUNICODEBytes ){
    + ExchangeWaveDash( (unsigned char *)pWork ); /* 2004/04/23 じゅうじ */
    j = wctomb( (char*)pDes, ((wchar_t*)pWork)[0] );
    @@ -3090,2 +3101,3 @@
    /* 変換可能なUnicodeか */
    + ExchangeWaveDash( (unsigned char *)&pszWork[j] ); /* 2004/04/23 じゅうじ */
    nUniBytes = wctomb( (char*)NULL, *(wchar_t*)(&pszWork[j]) );
    以上
    • [3551] Re2: UTF-8文字化け(~) もか 2004年04月26日 00:19

      >Google の検索をしたHTMLソースで、「~」記号が使用出来るようになります。
      この意味が良く分かりません。
      あと、取り込むことを前提にしているなら、私はそれに反対します。

      理由は、~だけ変えているので、どの変換表とも違う新しい変換表であるということと、
      CP932とUTF-8の変換を期待している人にとっては、U+FF5Eが使えなくて、さらに問題になるからです。
      実装するなら、ベンダー間で違う文字を~以外も含めて考慮した上で、「変換テーブル」を選べるようにするか、
      UTF-8(glibc)、UTF-8(Java1.4)のような、妙なエンコードを追加するべきです。

      ▼渡辺さん >>data::3262
      >U+301C→0x8160
      >U+FF5E→0x8160
      >の両刀使いが、ファジィで良いと思います。(汗)
      というように、多対一変換で対応するだけでいい人も居ます。

      # 個人利用を目的に、このパッチを掲示板に書いてくれたというのなら大歓迎です。
      # Fedoraとか、gettextとかがUTF-8を要求してくるらしい昨今では、この辺の違いは痛いようですが、何とかならないのかなぁ
      • [3552] Re3: UTF-8文字化け(~) じゅうじ 2004年04月26日 07:00

        ▼ もかさん
        > >Google の検索をしたHTMLソースで、「~」記号が使用出来るようになります。
        > この意味が良く分かりません。
        > あと、取り込むことを前提にしているなら、私はそれに反対します。

        Google でホームページを検索すると、title の文字コードが、全てUTF-8に統一されます。
        他の検索エンジンの事を考えなければ、「~」文字だけでHTMLのソースが文字化けするのは、
        問題だと思います。

        この関数に、私が、他の変換を入れる予定は、今の所有りません。(CMemory::ExchangeWaveDash())

        n:1 (n>1)のコード変換をしない理由は、違う文字コードであることを残したかった為です。

        最初の目標は、Unicodeで未使用の文字コードを、プログラム内で、独自のShift-JISコード
        として管理できないか、というつもりでした。

        では、また。
        • [3553] Re4: UTF-8文字化け(~) もか 2004年04月27日 00:28

          >Google でホームページを検索すると、title の文字コードが、全てUTF-8に統一されます。
          >他の検索エンジンの事を考えなければ、「~」文字だけでHTMLのソースが文字化けするのは、
          >問題だと思います。

          Googleの場合に限れば、オプションのoe=UTF-8をoe=Shift_JISとすると、Shift_JISで出力してくれるけど、それじゃ駄目なんでしょうか。
          そういう問題でなさそうだけど。

          >n:1 (n>1)のコード変換をしない理由は、違う文字コードであることを残したかった為です。
          >最初の目標は、Unicodeで未使用の文字コードを、プログラム内で、独自のShift-JISコード
          >として管理できないか、というつもりでした。
          そういう用途なら、こういう実装も納得できます。
          URL忘れましたが、そういう拡張Shift_JISコードを考えたて実装もしてみているサイトがあります。中国の新しい符号化方式とだいたい同じ方法だそうです。
      • [3555] Re2: UTF-8文字化け(~) じゅうじ 2004年04月29日 12:30

        すみません。
        U+FF5E の保存がうまく出来ないので、十分とは言えません。
        では、後ほど。
        • [3556] Re3: UTF-8文字化け(~) じゅうじ 2004年04月29日 15:28

          /* WAVE DASH を、~と交換。 2004/04/29 じゅうじ */
          void CMemory::ExchangeWaveDash( unsigned char *pWork )
          {
          /* ― */
          if(pWork[1] == 0x20 && pWork[0] == 0x15)
          pWork[1] = 0x20, pWork[0] = 0x14;
          else if(pWork[1] == 0x20 && pWork[0] == 0x14)
          pWork[1] = 0x20, pWork[0] = 0x15;
          /* ~ */
          else if(pWork[1] == 0xFF && pWork[0] == 0x5E)
          pWork[1] = 0x30, pWork[0] = 0x1C;
          else if(pWork[1] == 0x30 && pWork[0] == 0x1C)
          pWork[1] = 0xFF, pWork[0] = 0x5E;
          /* ∥ */
          else if(pWork[1] == 0x22 && pWork[0] == 0x25)
          pWork[1] = 0x20, pWork[0] = 0x16;
          else if(pWork[1] == 0x20 && pWork[0] == 0x16)
          pWork[1] = 0x22, pWork[0] = 0x25;
          /* - */
          else if(pWork[1] == 0xFF && pWork[0] == 0x0D)
          pWork[1] = 0x22, pWork[0] = 0x12;
          else if(pWork[1] == 0x22 && pWork[0] == 0x12)
          pWork[1] = 0xFF, pWork[0] = 0x0D;
          /* ¢ */
          else if(pWork[1] == 0xFF && pWork[0] == 0xE0)
          pWork[1] = 0x00, pWork[0] = 0xA2;
          else if(pWork[1] == 0x00 && pWork[0] == 0xA2)
          pWork[1] = 0xFF, pWork[0] = 0xE0;
          /* £ */
          else if(pWork[1] == 0x22 && pWork[0] == 0x25)
          pWork[1] = 0x00, pWork[0] = 0xA3;
          else if(pWork[1] == 0x00 && pWork[0] == 0xA3)
          pWork[1] = 0x22, pWork[0] = 0x25;
          /* ¬ */
          else if(pWork[1] == 0xFF && pWork[0] == 0xE2)
          pWork[1] = 0x00, pWork[0] = 0xAC;
          else if(pWork[1] == 0x00 && pWork[0] == 0xAC)
          pWork[1] = 0xFF, pWork[0] = 0xE2;
          }

          Special thanks to,
          Google search site:miraclelinux.com iconv_memo