我正在从 .csv 文件上传大量信息,我需要将这个非 ASCII 字符“�”替换为普通空格“”。
字符“�”对应于 C、C++ 和 Java 中的“\uFFFD”,它似乎被称为 REPLACEMENT CHARACTER .还有其他的,比如像U+FEFF这样的空格类型, U+205F , U+200B , U+180E , 和 U+202F在 C# 官方文档中。
我正在尝试以这种方式进行替换:
public string Errors = "";
public void test(){
string textFromCsvCell = "";
string validCharacters = "^[0-9A-Za-z().:%-/ ]+$";
textFromCsvCell = "This is my text from csv file"; //All spaces aren't normal space " "
string cleaned = textFromCsvCell.Replace("\uFFFD", "\"")
if (Regex.IsMatch(cleaned, validCharacters ))
//All code for insert
else
Errors=cleaned;
//print Errors
}
测试方法向我展示了这段文字:
“这是来自 csv 文件的我的文本”
我也尝试了一些解决方案:
尝试解决方案 1:使用 Trim
Regex.Replace(value.Trim(), @"[^\S\r\n]+", " ");
尝试解决方案 2:使用替换
System.Text.RegularExpressions.Regex.Replace(str, @"\s+", " ");
尝试解决方案 3:使用 Trim
String.Trim(new char[]{'\uFEFF', '\u200B'});
尝试解决方案 4:将 [\S\r\n] 添加到 validCharacters
string validCharacters = "^[\S\r\n0-9A-Za-z().:%-/ ]+$";
没有任何作用。
如何替换它?
来源:
已编辑
这是原始字符串:
“血糖连续监测系统”
以 0x... 表示法
OF0xA0 系统继续监测葡萄糖
解决方案
转到 Unicode code converter 。查看转换并执行替换。
在我的例子中,我做了一个简单的替换:
string value = "SYSTEM OF MONITORING CONTINUES OF GLUCOSE";
//value contains non-breaking whitespace
//value is "SYSTEM OF�MONITORING CONTINUES OF GLUCOSE"
string cleaned = "";
string pattern = @"[^\u0000-\u007F]+";
string replacement = " ";
Regex rgx = new Regex(pattern);
cleaned = rgx.Replace(value, replacement);
if (Regex.IsMatch(cleaned,"^[0-9A-Za-z().:<>%-/ ]+$"){
//all code for insert
else
//Error messages
这个表达式表示所有可能的空格:空格、制表符、分页符、换行符和回车符
[ \f\n\r\t\v\u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]
引用资料
最佳答案
使用 String.Replace:
使用简单的 String.Replace()
。
我假设您想要删除的唯一字符是您在问题中提到的字符:�
并且您想用普通空格替换它们。
string text = "imp�ortant";
string cleaned = text.Replace('\u00ef', ' ')
.Replace('\u00bf', ' ')
.Replace('\u00bd', ' ');
// Returns 'imp ortant'
或使用 Regex.Replace:
string cleaned = Regex.Replace(text, "[\u00ef\u00bf\u00bd]", " ");
// Returns 'imp ortant'
尝试一下:Dotnet Fiddle
关于c# - 用空格替换 Unicode 字符 "�",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44003317/