当前位置:  开发笔记 > 编程语言 > 正文

如何从字符串中删除非ASCII字符?(在C#中)

如何解决《如何从字符串中删除非ASCII字符?(在C#中)》经验,为你挑选了6个好方法。

如何从字符串中删除非ASCII字符?(在C#中)



1> philcruz..:
string s = "søme string";
s = Regex.Replace(s, @"[^\u0000-\u007F]+", string.Empty);


@Metro Smurf ^是非运算符.它告诉正则表达式找到所有不匹配的东西,而不是匹配的所有东西.\ u #### - \u ####表示哪些字符匹配.\ u0000-\u007F是utf-8或unicode中前255个字符的等值,它们始终是ascii字符.所以你匹配每个非ascii字符(因为not)并对匹配的所有内容进行替换.
可打印字符的范围是0020-007E,适用于寻找正则表达式来替换不可打印字符的人
对于我们这些RegEx的挑战者,您是否介意用简单的英语写出您的RegEx模式.换句话说,"^这样做"等等......
@full_prog_full这就是为什么我在一分钟之后回复自己,纠正自己说它是127而不是255. :)

2> bzlm..:

这是一个不使用正则表达式的纯.NET解决方案:

string inputString = "Räksmörgås";
string asAscii = Encoding.ASCII.GetString(
    Encoding.Convert(
        Encoding.UTF8,
        Encoding.GetEncoding(
            Encoding.ASCII.EncodingName,
            new EncoderReplacementFallback(string.Empty),
            new DecoderExceptionFallback()
            ),
        Encoding.UTF8.GetBytes(inputString)
    )
);

它可能看起来很麻烦,但它应该是直观的.它使用.NET ASCII编码转换字符串.转换期间使用UTF8,因为它可以表示任何原始字符.它使用EncoderReplacementFallback将任何非ASCII字符转换为空字符串.


你真的觉得它更容易理解吗?对我而言,所有与之无关的东西(后备,转换为字节等)都会引起人们对实际情况的注意.
这有点像说螺丝刀太混乱所以我只会用锤子代替.
一个优点是我可以轻松地用ISO 8859-1或其他编码替换ASCII :)
@Brandon,实际上,这项技术并不比其他技术更好.因此,类比将使用普通的旧螺丝刀而不是花哨的iScrewDriver Deluxe 2000. :)
完善!在将字符串保存到RTF文档之前,我使用它来清理字符串.非常感谢.比Regex版本更容易理解.

3> 小智..:

我相信MonsCamus意味着:

parsememo = Regex.Replace(parsememo, @"[^\u0020-\u007E]", string.Empty);



4> sinelaw..:

如果你不想剥离,但实际上将拉丁语重音转换为非重音字符,请看一下这个问题:如何将8位字符转换为7位字符?(即Ü到U)



5> Bent Rasmuss..:

受philcruz的Regular Expression解决方案的启发,我制作了纯粹的LINQ解决方案

public static string PureAscii(this string source, char nil = ' ')
{
    var min = '\u0000';
    var max = '\u007F';
    return source.Select(c => c < min ? nil : c > max ? nil : c).ToText();
}

public static string ToText(this IEnumerable source)
{
    var buffer = new StringBuilder();
    foreach (var c in source)
        buffer.Append(c);
    return buffer.ToString();
}

这是未经测试的代码.


替换单独的ToText()方法,如何用以下方法替换PureAscii()的第3行:return new string(source.Select(c => c max?nil:c).ToArray()) ;

6> 小智..:

不需要正则表达式.只是使用编码...

sOutput = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.ASCII.GetBytes(sInput));


这不起作用.这不会剥离unicode字符,它会用?替换它们?字符.
推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有