Help us understand the problem. What is going on with this article?

[C#] サロゲートペアを含む文字列の文字数を取得する

More than 3 years have passed since last update.

サロゲートペアを含む文字列の文字数をカウントしたい

@NetSeed さんにコメントでご指摘いただいた方法のほうが良さそうでしたので修正しました

対応方法

以下を使うと良いようです。

StringInfo.LengthInTextElements プロパティ (System.Globalization)

実装例

実装例
public static int CombiningCharactersLength(this string str)
{
    return (new System.Globalization.StringInfo(str)).LengthInTextElements;
}
テスト
[TestMethod]
public void Test_CombiningCharactersLength()
{
    var str = "𩸽";
    Assert.AreEqual(str.CombiningCharactersLength(), 1);
}

参考

文字数を正確にカウントするには?(サロゲート文字対応)[C#、VB] - @IT

以下は古い方法だったようですので参考程度にしてください。


対応方法

System.Globalization.StringInfo.ParseCombiningCharacters(string) を使用する
StringInfo.ParseCombiningCharacters メソッド (String) (System.Globalization)

制御文字のインデックスのリスト(int[]) が返るため、そのLengthを取れば良い

実装例

実装例
public static class StringExtentions
{
    public static int CombiningCharactersLength(this string str)
    {
        return System.Globalization.StringInfo.ParseCombiningCharacters(str).Length;
    }
}
テスト
[TestMethod]
public void Test_CombiningCharactersLength()
{
    var str = "𩸽";
    Assert.AreEqual(str.CombiningCharactersLength(), 1);
}

参考

文字列の長さ(文字数)を取得する: .NET Tips: C#, VB.NET
JavaScriptでのサロゲートペア文字列のメモ - Qiita

koara-local
言語は最近は C#, Javaあたりがメイン。端末VimからIDEに移行。IntelliJすごい。Qiitaでの記事やその中の主張は、所属している企業/団体の意見を代表するものではありません。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした