スポンサーリンク
スポンサーリンク

C#で結合文字をカウントする場合の注意点

C#Visual StudioWindowsWPF文字コード・フォント

「Ninja Cat with Coffee」など、「Zero Width Joiner (ZWJ)」で絵文字を結合した Windows独自拡張の絵文字。
https://blog.emojipedia.org/ninja-cat-the-windows-only-emoji/
https://so-kai-app.sakura.ne.jp/blog/1293/2016/09/02/

StringInfo.LengthInTextElementsプロパティを使えば、サロゲートペアや結合文字列を1文字として文字数をカウントできますが、拡張書記素クラスター(Zero Width Joiner (ZWJ))に対応していない為、Unicodeに分割した後の文字がカウントされる。
「Ninja Cat with Coffee」は、3文字(絵文字+ZWJ+絵文字)5バイトとカウントされました。
https://ufcpp.net/blog/2017/10/graphemesplitter/
https://ufcpp.net/blog/2016/12/tipsformattingcharacter/

C#では1文字と判別できないのに、WPFなどの画面に1文字の絵文字が表示されるのは、Windowsフォント(C:\Windows\Fonts)&フォントフォールバックが、プログラミング言語とは別の仕組みで対応している為。
メモ超などのテキストエディタは、unicodeに変換した後の文字列を表示する為、Windows独自拡張の絵文字は表示されない。
https://s-mint-t.net/2018/11/04/windows-font-1/

以下、Unicodeと絵文字の関係など

NETのバージョンと、Unicode標準のバージョン 対応関係は下記になります。
.NET Framework 1.1 Unicode 標準、バージョン 4.0.0
.NET Framework 2.0 Unicode 標準、バージョン 5.0.0
.NET Framework 3.5 Unicode 標準、バージョン 5.0.0
.NET Framework 4 Unicode 標準、バージョン 5.0.0
.NET Framework 4.5 Unicode 標準、バージョン 6.3.0
.NET Framework 4.51 Unicode 標準、バージョン 6.3.0
.NET Framework 4.52 Unicode 標準、バージョン 6.3.0
.NET Framework 4.6 Unicode 標準、バージョン 6.3.0
.NET Framework 4.61 Unicode 標準、バージョン 6.3.0
.NET Framework 4.6.2 およびそれ以降のバージョン Unicode 標準、バージョン 8.0.0
.NET Core (すべてのバージョン) Unicode 標準、バージョン 8.0.0
https://docs.microsoft.com/ja-jp/dotnet/api/system.string?view=netframework-4.7.2

Unicode 6.1.0~6.3.0に追加された文字
https://matome.naver.jp/odai/2132053311969628601

UnicodeのVersion毎に対応した絵文字。
https://emojipedia.org/unicode-6.1/
http://www.asahi-net.or.jp/~ax2s-kmtn/ref/unicode/u1f300.html#af

Windows 記号一覧
http://www.wannko.net/windows10/app/code.html

 

WPF開発 記事一覧

WPF

 

コメント

タイトルとURLをコピーしました