Open berryzplus opened 5 years ago
「この文字列」がどの文字列か曖昧さがありますが、背景色が異なる文字列を選択してブラウザコンソールで getSelection().toString().length
を実行しました。結果は順に 4, 3, 19, 2 でした。同意できる数字です。
結合文字や異体字セレクタが混じると意見が変わるでしょうし、問3で空白(文字)をカウントしたことにすでに異論があるかもしれません。「文字」という概念を「文字コード」から切り離して考えるなら、空白を何分割してカウントすることも可能ですから、「半角空白が3文字」という数え方は「文字」の数え方とは異なります。
以上、真意が不明なために面倒くさくなってしまった答えでした。
以上、真意が不明なために面倒くさくなってしまった答えでした。
あざっす。真意が伝わりそうな方向に引っかかっていただき、感謝です。 これは、Unicodeの結合文字の概念を理解するためのデモンストレーションです。
ぼくが思う回答は、もうちょっと様子を見てから書きます。 (一応、サクラエディタ機能追加提案の前振りのつもりで立てたissueです。)
No | 文字列 | byte数(UTF-8) | コードポイント数 | 文字数 |
---|---|---|---|---|
問1. | test | 4 | 4 | 4 |
問2. | テスト | 9 | 3 | 3 |
問3. | Schrödingers Katze | 20 | 19 | 17 |
問4. | ネ申 | 6 | 2 | 1 |
コンピュータ内部の文字列がどのように描画されるか、また、描画された文字列をどのように認識されるか、というのは文化によって異なると思います。
すでに書いてますが問3がポイントで、この文字列はドイツ語の結合文字(ö)を含んでいます。 これは(o)と( ̈)の2つのコードポイントで構成されていますが、人の目には1字に見えます。 「何文字ですか?」に対して空白を1字にカウントするのは変だと思うので回答は17になります。
文字の認識方法は文化によって変わる、これを示すために作ったのが問4です。 「神」という字は「ころもへん(ネ)」に「申す」と書きます。 「ネ申」を「神」とよめるのは2ちゃんが横書きの文化だからだと思います。
WinNLS (Windows の National Language Support) では主要な国・地域・言語における文化の違いがすでに実装されています。ちゃんと使えば結合文字(ö)を1字とカウントさせることができます。 (「ネ申」は無理です。
この辺(↓)の表記の違いも、正しく表示できたらいいなぁ、とか思ったり思わなかったり。
問1.
問2.
問3.
問4.