You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在UWP聊天应用中移除文本格式与自定义字体?

UWP聊天应用文本清理方案:移除怪异字体与格式

针对你遇到的怪异字体(Unicode组合字符叠加)和文本格式问题,可通过以下几种简便方式实现消息清理:

一、Unicode规范化移除变音符号

这类怪异效果大多依赖Unicode非间距标记(叠加的变音符号),通过规范化+过滤可还原基础字符:

using System.Globalization;
using System.Linq;

public string CleanCombinedChars(string input)
{
    // NFC规范化将组合字符合并为单个基础字符
    string normalizedText = input.Normalize(NormalizationForm.FormC);
    // 过滤所有非间距标记字符
    return new string(normalizedText.Where(c => CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark).ToArray());
}

二、限制字符范围,保留常规文本

只允许常见的可打印字符、主流语言字符,过滤特殊Unicode区块内容:

using System.Text;

public string FilterValidChars(string input)
{
    StringBuilder result = new StringBuilder();
    foreach (char c in input)
    {
        // 保留ASCII可打印字符、中文、日文、韩文等常规文本
        if ((c >= 0x20 && c <= 0x7E) || 
            (c >= 0x4E00 && c <= 0x9FFF) || 
            (c >= 0x3040 && c <= 0x30FF) || 
            (c >= 0xAC00 && c <= 0xD7AF))
        {
            result.Append(c);
        }
    }
    return result.ToString();
}

三、显示层强制统一字体

在XAML控件中明确指定字体,避免自定义字体格式生效:

<!-- TextBlock强制使用系统默认字体 -->
<TextBlock FontFamily="Segoe UI" Text="{Binding SanitizedMessage}" />

<!-- RichTextBlock同样强制字体 -->
<RichTextBlock FontFamily="Segoe UI">
    <Paragraph>
        <Run Text="{Binding SanitizedMessage}" />
    </Paragraph>
</RichTextBlock>

四、组合清理流程

将规范化、字符过滤结合,实现彻底的消息清理:

public string SanitizeChatMessage(string input)
{
    if (string.IsNullOrEmpty(input)) return input;
    
    string normalized = input.Normalize(NormalizationForm.FormC);
    string withoutMarks = new string(normalized.Where(c => CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark).ToArray());
    return FilterValidChars(withoutMarks);
}

内容的提问来源于stack exchange,提问作者deskplace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 12:44:55