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

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

  • 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使えってことだよ

ソースを見ろ -- ある4桁UID

処理中...