C# (dotnetcore) 異体字セレクタ(辻辻󠄀)、サロゲートペア文字(𠀋)、絵文字(💡)を扱ってみる。(Visual Studio for Mac環境)
日本語文字ってややこしいです。
「💡辻辻󠄀𠀋」なんて文字をc#で扱ってみました。
lengthが正しい文字数でないことをご確認ください。
Visual Studio for Mac環境だと文字化け
辻󠄀が文字化け
Visual Studio Codeは惜しい
辻と辻󠄀の違いが分からない。
ソース
using System; namespace StringExample { class Program { static void Main(string[] args) { String str1 = "test"; Console.WriteLine(str1); Console.WriteLine(str1.Length); Console.WriteLine(str1.LengthInTextElements()); String str2 = "日本語"; Console.WriteLine("string:" + str2); Console.WriteLine("Length:" + str2.Length); Console.WriteLine("LengthInTextElements" + str2.LengthInTextElements()); string str3 = "💡"; Console.WriteLine("string:" + str3); Console.WriteLine("Length:" + str3.Length); Console.WriteLine("LengthInTextElements:" + str3.LengthInTextElements()); string str4 = "辻"; Console.WriteLine("string:" + str4); Console.WriteLine("Length:" + str4.Length); Console.WriteLine("LengthInTextElements:" + str4.LengthInTextElements()); string str5 = "辻󠄀"; Console.WriteLine("string:" + str5); Console.WriteLine("Length:" + str5.Length); Console.WriteLine("LengthInTextElements:" + str5.LengthInTextElements()); string str6 = "𠀋"; Console.WriteLine("string:" + str6); Console.WriteLine("Length:" + str6.Length); Console.WriteLine("LengthInTextElements:" + str6.LengthInTextElements()); } } static class StringExtention { public static int LengthInTextElements(this string str) { return (new System.Globalization.StringInfo(str)).LengthInTextElements; } } }
結果
コンソールには、異体字セレクタ(辻辻󠄀)、サロゲートペア文字(𠀋)、絵文字(💡)が正しく表示されている