c# - 用空格替换 Unicode 字符 "�"

标签 c# regex validation trim

我正在从 .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/

相关文章:

ruby-on-rails - 为什么 HABTM 上的 "validate"选项不起作用?

c# - 清理散落着 InvokeRequired 的代码

python - 将返回带有特殊字符 | 的单个单词名称的正则表达式是什么? (管道)

Ruby Koans - 正则表达式和 .sub : Don't understand reason behind answer

php: 从字符串的开头修剪 br 标签?

scala - 如何使用 Scala 验证 Vaadin 中的表中的字段

c# - IEnumerable<T> 和 IQueryable<T> 的通用方法

c# - 嵌入一​​个简单的 ActiveX 控件得到类未注册错误

c# - Web 服务器不允许使用 Post 方法

java - 检查有效的 URL、URI 构造