アカウント名:
パスワード:
wcslenの戻り値がlinuxとwindowsで結果が異なるのを何とかしてくれないことには、どうにもならないと想う
こんなの [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) = 2"のWindowsの違いでしょう。
Linux (というか gcc) でも、wchar_t は2バイトになる環境もある。wchar_t は実装依存であるうえに wcslen は wchar_t の数を数えるだけで文字数は数えない。なので「UTF-8」使えってのは、wchar_t 使っておいて、そんな事言い出すなよっていうもっと根源的な話。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
吾輩はリファレンスである。名前はまだ無い -- perlの中の人
wcslenの戻り値 (スコア:2)
wcslenの戻り値がlinuxとwindowsで結果が異なるのを何とかしてくれないことには、
どうにもならないと想う
Re: (スコア:1)
Re:wcslenの戻り値 (スコア:0)
こんなの [wandbox.org]。
Linuxではどちらも1ですが、Windowsでは1と2になります。
"sizeof(wchar_t) = 4"なLinuxと、"sizeof(wchar_t) = 2"のWindowsの違いでしょう。
Re:wcslenの戻り値 (スコア:1)
wcslenはサロゲートペアも考慮した文字の数をちゃんと数えてくれるものだと思い込んでいたのですが、実際はwchar_t要素を数えてるだけだったんですね。。勉強になりました。
と、すると、下のコメントにある「UTF-8使えってことだよ」はちょっと的外れですよね
・Windowsも早いとこsizeof(wchar_t)==4にしてくれ > MS もしくは
・サロゲートペアも考慮した文字数数える標準関数用意してくれ >標準化
かな。
Re: (スコア:0)
Linux (というか gcc) でも、wchar_t は2バイトになる環境もある。
wchar_t は実装依存であるうえに wcslen は wchar_t の数を数えるだけで文字数は数えない。
なので「UTF-8」使えってのは、wchar_t 使っておいて、そんな事言い出すなよっていうもっと根源的な話。