gpt4 book ai didi

c# - 如何从字符串中删除 unicode.OtherSymbol

转载 作者:行者123 更新时间:2023-11-30 14:48:54 25 4
gpt4 key购买 nike

我正在尝试从给定字符串中删除像 ✅🔮⛱😂⛄ 这样的字符。这些字符属于 UnicodeCategory.OtherSymbol,但 char.GetUnicodeCategory 返回 UnicodeCategory.Surrogate

如果我只是想从字符串中删除那些情感/图片字符,而让其他代理字符保持不变,我该怎么办?

我试过 Regex.IsMatch("🔮", @"\p{So}"),没用。

最佳答案

.NET 在遍历 Unicode 字符而不是 UTF-16 代码单元时并不是很好。所有相关代码都在那里,但使用起来并不十分容易。有可能 Regex 可以理解代理对,但我还没有找到它。

这是一个手动操作的例子:

using System;
using System.Globalization;
using System.Text;

public class Program
{
public static void Main(string[] args)
{
string text = "a\u2705b\U0001f52ec\u26f1d\U0001F602e\U00010000";
string cleansed = RemoveOtherSymbols(text);
Console.WriteLine(cleansed);
}

static string RemoveOtherSymbols(string text)
{
// TODO: Handle malformed strings (e.g. those
// with mismatched surrogate pairs)
StringBuilder builder = new StringBuilder();
int index = 0;
while (index < text.Length)
{
// Full Unicode character
int units = char.IsSurrogate(text, index) ? 2 : 1;
UnicodeCategory category = char.GetUnicodeCategory(text, index);
int ch = char.ConvertToUtf32(text, index);
if (category == UnicodeCategory.OtherSymbol)
{
Console.WriteLine($"Skipping U+{ch:x} {category}");
}
else
{
Console.WriteLine($"Keeping U+{ch:x} {category}");
builder.Append(text, index, units);
}
index += units;
}
return builder.ToString();
}
}

关于c# - 如何从字符串中删除 unicode.OtherSymbol,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40007605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com