如何从字符串中删除这些符号(垃圾)?
想象一下,我在C#中有String:"我不知道吗?"
我想删除(替换为空或者其他内容)这些"?a ?? a?"符号。
我该怎么做呢?
解决方案
回答
这些字符的ASCII /整数代码将超出正常的字母范围。寻找并替换为空字符。我相信String有一个Replace方法。
回答
考虑使用Regex.Replace(your_string,regex,"")。
回答
"I Don?¢a??a?¢t see ya..".Replace( "?¢a??a?¢", string.Empty);
那垃圾是怎么到达那里的?那才是真正的问题。
回答
依次测试每个字符以查看它是有效的字母字符还是数字字符,如果不是,则将其从字符串中删除。字符测试非常简单,只需使用...
char.IsLetterOrDigit;
请有其他各种,如...
char.IsSymbol; char.IsControl;
回答
使用我们不想要的东西的黑名单,或者最好使用白名单(一套)。使用白名单,我们可以遍历字符串,并且仅将白名单中的字母复制到结果字符串中。我们说的是remove,并且这样做的方式是有两个指针从(R)读取,而另一个指针写入(W):
I Don?¢a? W R
如果逗号在白名单中,那么我们将在这种情况下阅读逗号并将其写在哪里?然后将两个指针都向前移动。 UTF-8是一种多字节编码,因此前进指针可能不只是添加到地址中。
使用C是使用预定义函数(或者宏)之一获取白名单的简便方法:isalnum,isalpha,isascii,isblank,iscntrl,isdigit,isgraph,islower,isprint,ispunct,isspace,isupper,isxdigit在这种情况下,我们发送的是白名单功能,而不是一组课程。
通常,当我看到像我们一样的数据时,我会寻找内存损坏,或者证据表明我期望的编码与输入数据时所用的编码不同。
/艾伦
回答
对于使用标准字符编码将Windows字符集存储在数据库中的字符编码问题,这看起来令人不安。我看到有人投票否决了威尔,但他有观点。我们可能正在解决眼前的问题,但是如果这是问题,则字符的组合是无限的。
回答
通过删除任何非拉丁字符,我们将有意破坏一些国际化支持。
不要忘了那个名字叫" a"的可怜的家伙。
回答
如果确实需要这样做,则正则表达式可能是最好的解决方案。
我强烈建议我们考虑为什么要这样做,尽管我们列出的不受欢迎字符中的至少某些字符在其他语言中是完全有效和有用的,仅过滤掉它们很可能会至少使一些国际性恼人用户。作为瑞典人,我无法强调太多我讨厌不能处理我们的?,?的系统。和 ?正确的字符。
回答
这种"垃圾"看起来很像有人将UTF-8数据解释为ISO 8859-1或者Windows-1252的过程,可能是反复的。
一个吗?是序列C3 A2,E2 82 AC,E2 84 A2.
- UTF-8 C3 A2 = U + 00E2 = a
- UTF-8 E2 82 AC = U + 20AC =
- UTF-8 E2 84 A2 = U + 2122 =?
然后我们再做一次:在Windows 1252中,此序列为E2 80 99,因此字符应为U + 2019,右单引号()
我们可以使用字节数组Encoding.UTF8和Encoding.GetEncoding(1252)进行多次传递,以正确地将垃圾变为最初输入的内容。我们将需要检查处理情况,以找到UTF-8数据被错误地解释为Windows-1252的两个位置。
回答
Regex.Replace("字符串"," [^ a-zA-Z]","");
尽管该正则表达式([^ a-zA-Z])应该适用于大多数语言,但这就是我们在C#中的处理方式。
[编辑:忘记了正则表达式中的空格]