Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

問題。この文字列は何文字? #68

Open
berryzplus opened this issue Apr 6, 2019 · 3 comments
Open

問題。この文字列は何文字? #68

berryzplus opened this issue Apr 6, 2019 · 3 comments

Comments

@berryzplus
Copy link

問1.

test (英語)

問2.

テスト (日本語)

問3.

Schrödingers Katze (シュレディンガーの猫、ドイツ語表記)

問4.

ネ申 (2ちゃん語)

@ds14050
Copy link

ds14050 commented Apr 6, 2019

「この文字列」がどの文字列か曖昧さがありますが、背景色が異なる文字列を選択してブラウザコンソールで getSelection().toString().length を実行しました。結果は順に 4, 3, 19, 2 でした。同意できる数字です。

結合文字や異体字セレクタが混じると意見が変わるでしょうし、問3で空白(文字)をカウントしたことにすでに異論があるかもしれません。「文字」という概念を「文字コード」から切り離して考えるなら、空白を何分割してカウントすることも可能ですから、「半角空白が3文字」という数え方は「文字」の数え方とは異なります。

以上、真意が不明なために面倒くさくなってしまった答えでした。

@berryzplus
Copy link
Author

以上、真意が不明なために面倒くさくなってしまった答えでした。

あざっす。真意が伝わりそうな方向に引っかかっていただき、感謝です。
これは、Unicodeの結合文字の概念を理解するためのデモンストレーションです。

ぼくが思う回答は、もうちょっと様子を見てから書きます。
(一応、サクラエディタ機能追加提案の前振りのつもりで立てたissueです。)

@berryzplus
Copy link
Author

berryzplus commented Apr 13, 2019

回答

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字とカウントさせることができます。
(「ネ申」は無理です。

この辺(↓)の表記の違いも、正しく表示できたらいいなぁ、とか思ったり思わなかったり。

  • 東京都葛飾区 (葛󠄁)
  • 奈良県葛󠄀城󠄁市 (葛󠄀)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants