如何在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
相关产品推荐
相关产品推荐

