如何从C#中的字符串中删除非ASCII字

时间:2010-09-13 08:42:35

标签: c#

我想过滤一些字母错误的字符串(非ASCII)。它在Notepad,Visual Studio 2010和MySQL中看起来有所不同。

如何检查字符串是否包含非ASCII字母以及如何删除它们?

5 个答案:

答案 0 :(得分:4)

您可以使用正则表达式过滤非ASCII字符:

string input = "AB £ CD";
string result = Regex.Replace(input, "[^\x0d\x0a\x20-\x7e\t]", "");

答案 1 :(得分:1)

您可以使用正则表达式。

Regex.Replace(input, "[^a-zA-Z0-9]+", "")

您还可以使用\W+作为删除任何非字符的模式。

答案 2 :(得分:0)

首先,您需要确定“单词”的含义。如果不是ascii,这可能意味着非英语?

就个人而言,我会问你为什么需要这样做以及你的应用程序与数据冲突的基本假设是什么?根据具体情况,我建议您重新编码来自源编码的文本,尽管这将是一个有损转换,或者替代地,解决这个基本假设,以便您的应用程序正确处理数据。

答案 3 :(得分:0)

这是上帝发送的:

Regex.Replace(input, @"[^\u0000-\u007F]", "");

我想我最初在其他地方得到了它,但这里是相同答案的链接:

How can you strip non-ASCII characters from a string? (in C#)

答案 4 :(得分:-1)

我觉得这个简单的东西可能会起作用,不是吗?

public static string AsciiOnly(this string input, bool includeExtendedAscii)
{
    int upperLimit = includeExtendedAscii ? 255 : 127;
    char[] asciiChars = input.Where(c => (int)c <= upperLimit).ToArray();
    return new string(asciiChars);
}

使用示例:

string input = "AB£ȼCD";
string asciiOnly = input.AsciiOnly(false); // returns "ABCD"
string extendedAsciiOnly = input.AsciiOnly(true); // returns "AB£CD"
相关问题