パスワードを忘れた? アカウント作成
13454847 story
バグ

世界的な絵文字の普及によってUTF-8の普及やUTF-16における4バイト文字の扱いが改善される? 39

ストーリー by hylom
マルチバイトを扱う面倒くささを思い知れ 部門より

世界的な絵文字の普及によって、UTF-8の普及やUTF-16における4バイト文字の扱いが改善されつつあるという(絵文字がある種のUnicodeバグを世界から一掃しつつある件について)。

そもそも使用する文字が少ない欧米圏では、いわゆる「マルチバイト文字」の扱いに消極的、もしくは理解が足りないという歴史的な問題が存在した。そのためさまざまな文字エンコーディングが開発され、その後世界中のすべての文字を統一したエンコーディングで扱おうとする動きが出たものの、その結果欠点の多いUTF-16というエンコーディングを採用するプログラムや環境が登場したという。UTF-16では1文字を2バイトもしくは4バイトで表現するが、使用頻度の高い文字の多くは2バイトで表現されるため、「1文字=2バイト」を前提に処理を行ってしまうプログラムがあるという。

いっぽう、絵文字は基本的に1文字に4バイトが必要となる。そのため、「1文字=2バイト」を前提としたプログラムでは上手く処理できない。そのため、絵文字の普及によって適切に4バイトの文字を扱えないプログラムが改修されたり、 元々可変長が前提のUTF-8がより普及するのではないかとされている。

  • うんこ絵文字に (スコア:5, おもしろおかしい)

    by Anonymous Coward on 2017年11月14日 15時56分 (#3312069)

    感謝ですね。うーんこの

    ここに返信
  • by ikotom (20155) on 2017年11月14日 23時31分 (#3312389)

    英語圏プログラミング界隈においてデファクトコードの座を占め続けるASCIIを
    日本が育てた絵文字という文化的な価値を持って引きずり下ろし
    UTF-8で統一できたとしたら、これはある種の快挙ですよね。

    実際、非英語圏に属する人間がどれだけ助かるか訴えたところで
    英語圏の人達にすれば慣れ親しんだものを捨てて
    わざわざ面倒くさいものを選ぶわけもなく。

    人を動かすには適切なインセンティブが必要ってことは当然ですが
    そのインセンティブに絵文字がなれるなら嬉しいばかりです。

    # タイトル元ネタは Civilization です

    ここに返信
    • 英語圏プログラミング界隈においてデファクトコードの座を占め続けるASCIIを
      日本が育てた絵文字という文化的な価値を持って引きずり下ろし
      UTF-8で統一できたとしたら、これはある種の快挙ですよね。

      ASCIIが一文字1バイト、Kanjiが一文字3バイトというハンディは変らないのに、どこが快挙なものか。

      • by Anonymous Coward
        漢字圏は個々の文字により多くのビットが必要な分、文章としては少ない字数で同じ概念を表すことができるので、トータルでの優劣はありません
        Twitterの文字数制限のようなもの
        • by Anonymous Coward

          漢字は古代のエントロピー符号と見ることができないだろうか??

      • by Anonymous Coward

        >ASCIIが一文字1バイト、Kanjiが一文字3バイトというハンディは変らないのに、どこが快挙なものか。

        その文句は調子こいて2バイトでも収録しきれない数の漢字を作ったいにしえの漢民族と、その尻馬に乗っかって国字までこしらえちゃった我々のご先祖様達に言って下さい。

  • wcslenの戻り値がlinuxとwindowsで結果が異なるのを何とかしてくれないことには、
    どうにもならないと想う

    ここに返信
    • by feenal (37359) on 2017年11月16日 9時24分 (#3313228)
      すみません、wcslenの戻り値にwindowsとlinuxで差異があるというのが初耳で驚いています。 不勉強なもので、調べてみても見つからず… 具体的にどんな引数入れたら違いがでるのでしょうか?
      • by Anonymous Coward

        こんなの [wandbox.org]。

        #include <locale.h>
        #include <wchar.h>
        #include <stdio.h>

        int main()
        {
            setlocale(LC_CTYPE, "");
            printf("sizeof(wchar_t) = %zu\n", sizeof(wchar_t));
            printf("\u3042 = %zu\n", wcslen(L"\u3042"));
            printf("\U0001F197 = %zu\n", wcslen(L"\U0001F197"));
            return 0;
        }

        Linuxではどちらも1ですが、Windowsでは1と2になります。
        "sizeof(wchar_t) = 4"なLinuxと、"sizeof(wchar_t

        • by feenal (37359) on 2017年11月16日 22時58分 (#3313819)
          お、ありがとうございます。
          wcslenはサロゲートペアも考慮した文字の数をちゃんと数えてくれるものだと思い込んでいたのですが、実際はwchar_t要素を数えてるだけだったんですね。。勉強になりました。

          と、すると、下のコメントにある「UTF-8使えってことだよ」はちょっと的外れですよね
          ・Windowsも早いとこsizeof(wchar_t)==4にしてくれ > MS もしくは
          ・サロゲートペアも考慮した文字数数える標準関数用意してくれ >標準化
          かな。
          • by Anonymous Coward

            Linux (というか gcc) でも、wchar_t は2バイトになる環境もある。
            wchar_t は実装依存であるうえに wcslen は wchar_t の数を数えるだけで文字数は数えない。
            なので「UTF-8」使えってのは、wchar_t 使っておいて、そんな事言い出すなよっていうもっと根源的な話。

    • by Anonymous Coward

      UTF-8使えってことだよ

  • by Anonymous Coward on 2017年11月14日 16時30分 (#3312097)

    emoji test 👌

    ここに返信
    • by Anonymous Coward

      OKサインは「」
      IMEによって出すにはどうすんだろう
      コード番号指定?
      一覧からマウスで選択?

    • by Anonymous Coward

      ぶっちゃけほとんどサーバサイドでやることはなくてウェブブラウザ側の対応の方が重要な気もするが。

      • by Anonymous Coward

        ところがサーバーサイドでやらなくていいことをやって文字ぶち壊す人が居たりするので世の中は広い

        • by Anonymous Coward

          だって昔はEUC-JPやらJISやらShift-JISやらあって、Shift-JISもCP932とMacRomanと微妙に違ったりして、いろいろとひどかったし・・・。

  • by Anonymous Coward on 2017年11月14日 16時41分 (#3312109)

    Fontもまともなものがそろうといいなあ。
    Windowsのフォントエンジンやフォントヴューアの不具合で使えないフォントが結構ある。
    フォントのフォーマットのバージョンが違うだけかもしれんがな。
    IVSとUnicode 10.0にフル対応したVariable FontでSans Serif/Serif/Monospaseの3種類をそろえられるのは、大夫先だろう。
    ましてや、フリーかWindows標準添付となるとなおさら・・・

    ここに返信
    • by Anonymous Coward

      CKJ以外なら山ほどあるのにな

    • by Anonymous Coward

      とりあえず、IPAmj明朝とNotoシリーズでお茶を濁しておいたら?

    • by Anonymous Coward
      >フォントヴューア
      >バージョン

      なんだこれw
      気にならないのか
      • by Anonymous Coward

        Variable Fontだと、Windows 10 ver.1709でもOpenType-CFF2なvariable fontには一部しか対応してないぞ。
        svg形式のデータを含むフォントについても、Windows 10 ver.1709でも駄目だね。
        おかげで、Windowsだと、カラー絵文字系のフォントはWindows添付品しか使えない。

      • by Anonymous Coward

        >フォントヴューア
        MSの表記だと、「Windowsフォント ビューアー」が正しい表記だね。

      • by Anonymous Coward

        ディスクトップとか言いそうなタイプだと思う

        • by Anonymous Coward

          Font Viewerだから「ヴューア」というのはむしろMS正規表記より原語に近い表記だろ。
          「バージョン」はもう一般名詞化しているからそっちに引きずられるのは仕方ない。
          原語をまったく考えていない「ディスクトップ」とは明らかに間違いのレベルが違う。

  • by Anonymous Coward on 2017年11月14日 17時38分 (#3312161)

    4バイト文字を組み合わせて絵文字を作った

    ここに返信
typodupeerror

Stay hungry, Stay foolish. -- Steven Paul Jobs

読み込み中...