C#学习教程:从字符串中删除隐藏字符在Outlook中查看演示文稿时,Outlook会显示一个问号来代替无法识别的隐藏字符。这些隐藏的角色来自最终用户,他们将构成时事通讯的html复制并粘贴到表单中并提交。如果这些隐藏字符出现在字符串的末尾或开头,c#trim()会删除它们。在Gmail中查看简报时,Gmail可以很好地忽略它们。从Word文档粘贴这些隐藏字符并启用“显示段落标记和隐藏符号”选项时,这些符号显示为一个较大矩形内的矩形。构成时事通讯的文本也可以使用任何语言,因此必须接受Unicode字符。我试过遍历字符串来检测字符,但循环无法识别并传递它。还要求最终用户在提交之前先将html粘贴到记事本中是不可能的。我的问题:如何使用C#检测和消除这些隐藏字符?您可以使用以下方法从输入字符串中删除所有控制字符:stringinput;//这是你的输入字符串stringoutput=newstring(input.Where(c=>!char.IsControl(c)).ToArray());这是IsControl()方法的文档。或者,如果只想保留字母和数字,也可以使用IsLetter和IsDigit函数:stringoutput=newstring(input.Where(c=>char.IsLetter(c)||char.IsDigit(c)).ToArray());我通常使用这个正则表达式来替换所有不可打印的字符。顺便说一下,大多数人认为制表符、换行符和回车符是不可打印的字符,但对我来说它们不是。所以这是表达式:stringoutput=Regex.Replace(input,@"[^u0009u000Au000Du0020-u007E]","*");如果要更改它,请参阅ASCII表。请记住,它会去除每个非ASCII字符。要测试上面的内容,您可以像这样自己创建一个字符串:stringinput=string.Empty;for(inti=0;inewstring(input.Where(c=>!char.IsControl(c)).ToArray());IsControl缺少一些控制字符,如从左到右标记(LRM)(字符复制粘贴时通常隐藏在字符串中。如果你确定你的字符串只有数字和数字,那么你可以使用IsLetterOrDigitnewstring(input.Where(c=>char.IsLetterOrDigit(c)).ToArray())如果你的字符串有特殊字符然后newstring(input.Where(c=>c你可以这样做:varhChars=newchar[]{...};varresult=newstring(yourString.Where(c=>c!hChars.Contains(c)).ToArray());最适合我的是:stringresult=newstring(value.Where(c=>char.IsLetterOrDigit(c)||(c>=''&&c确保字符是任何字母或数字,这样我就不会忽略任何非英文字母,或者如果它不是字母,我会检查它是否是大于或等于a的ascii字符空格以确保我忽略了一些控制字符,这确保我没有忽略标点符号。有人建议使用IsControl检查字符是否不可打印,但从左到右标记都被忽略了。如果您知道这些字符是什么,则可以使用string.Replace:newString=oldString.Replace("?","");在哪里”?”表示要删除的字符。这种方法的缺点是,如果要删除多个字符,需要反复调用。已经有一段时间了,但还没有得到答案。如何在发送代码中包含HTML内容?如果您从文件中读取它,请检查文件编码。如果您使用签名的UTF-8(编辑器之间的名称略有不同),这可能会导致消息开头出现奇怪的字符。字符串输出=新字符串(输入。在哪里(c=>!char.IsControl(c))。ToArray());这肯定会解决问题。我在导致我的应用程序中断的字符串中有一个不可打印的替换字符(ASCII26),这行代码删除了该字符它对每个人都有用,需要了解更多有关C#的学习教程。希望大家多多关注---本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
