我有一个C#程序,从一个CSV文件导入数据,与它匹配对一个数据库,然后将它改写到一个文件中。 源文件似乎已经被污染了处理程序的几个非ASCII字符。
我已经有我贯穿每个输入字段静态方法,但它执行等方法去除逗号和报价基本检查。 有谁知道我怎么能添加的功能,也将删除非ASCII字符?
我有一个C#程序,从一个CSV文件导入数据,与它匹配对一个数据库,然后将它改写到一个文件中。 源文件似乎已经被污染了处理程序的几个非ASCII字符。
我已经有我贯穿每个输入字段静态方法,但它执行等方法去除逗号和报价基本检查。 有谁知道我怎么能添加的功能,也将删除非ASCII字符?
string sOut = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes(s))
这里一个简单的解决方案:
public static bool IsASCII(this string value)
{
// ASCII encoding replaces non-ascii with question marks, so we use UTF8 to see if multi-byte sequences are there
return Encoding.UTF8.GetByteCount(value) == value.Length;
}
来源: http://snipplr.com/view/35806/
做这一切在一次
public string ReturnCleanASCII(string s)
{
StringBuilder sb = new StringBuilder(s.Length);
foreach(char c in s)
{
if((int)c > 127) // you probably don't want 127 either
continue;
if((int)c < 32) // I bet you don't want control characters
continue;
if(c == ',')
continue;
if(c == '"')
continue;
sb.Append(c);
}
return sb.ToString();
}
如果你想测试一个特定的字符,你可以使用
if ((int)myChar <= 127)
刚开字符串的ASCII编码不会告诉你的是一个特定的字符是非ASCII开始与(如果你关心这一点)。 请参阅MSDN 。
这里的所接受的答案的改进:
string fallbackStr = "";
Encoding enc = Encoding.GetEncoding(Encoding.ASCII.CodePage,
new EncoderReplacementFallback(fallbackStr),
new DecoderReplacementFallback(fallbackStr));
string cleanStr = enc.GetString(enc.GetBytes(inputStr));
这种方法将值替换未知字符fallbackStr
,或者如果fallbackStr
是空的,让他们出去完全。 (请注意, enc
可以函数的范围之外来定义。)
这听起来有点奇怪,它的接受放弃非ASCII。
此外,我总是推荐优秀FileHelpers库解析的CSV文件。
public string RunCharacterCheckASCII(string s)
{
string str = s;
bool is_find = false;
char ch;
int ich = 0;
try
{
char[] schar = str.ToCharArray();
for (int i = 0; i < schar.Length; i++)
{
ch = schar[i];
ich = (int)ch;
if (ich > 127) // not ascii or extended ascii
{
is_find = true;
schar[i] = '?';
}
}
if (is_find)
str = new string(schar);
}
catch (Exception ex)
{
}
return str;
}