【问题标题】:Replace method not working for escaped char '\xA0' in C#替换方法不适用于 C# 中的转义字符 '\xA0'
【发布时间】:2018-11-22 08:40:18
【问题描述】:

我正在尝试将字符串中的 '\xA0' 字符替换为空白或最坏情况下的空格。 此代码确实编译并运行,但它不会用空格替换 nbsp 字符。

string line = Stream.ReadLine();
line = line.Replace('\xA0', ' ');

有人知道替代解决方案或遇到此问题吗?

【问题讨论】:

  • 你确定那个字符是\xA0吗?
  • It isn't。您应该检查字符串的各个字符以找出它的真正含义,然后再回头查找您可能遇到的任何编码问题。
  • 问题很可能不存在。您需要返回到您的 StreamReader 并确保使用正确的编码对其进行初始化。
  • SteamReader 中的问题是什么?我可以在 Notepad++ 中读取完全相同的数据,所以没有意义..
  • Notepad++ 会自动检测文本编码。 StreamReader 没有。

标签: c# replace escaping


【解决方案1】:

基于this的线程可以试试吗?

line.Replace('\u00A0', ' ');

好的,我想在这里赎回自己。使用正则表达式怎么样?像这样:

string text = " Ph0b0x � ";
string result = Regex.Replace(text, @"[^\x00-\x7F]+", "");
Console.WriteLine(text);
Console.WriteLine(result);
Console.ReadLine();

我的结果:

 Ph0b0x    

 Ph0b0x

发现正则表达式模式here

【讨论】:

  • '\u00A0''\xA0' are equivalent,所以这无济于事。
  • Ph0b0x 感谢您的努力,但在发布此问题之前我确实尝试了该线程。不工作:(
  • @Jtuck 你可以试试我刚刚添加的代码吗?
【解决方案2】:

我找到了这个问题的合理解决方案。因此,我将 &nbsp � 字符转换为 int (65533),因此我使用该值并使用 ToChar() 方法获取我的字符,然后使用该字符进行替换。

        string line = Stream.ReadLine();
        char SpecNBSPChar = Convert.ToChar(65533);
        line = line.Replace(SpecNBSPChar , ' ');

字符串替换方法之后。

【讨论】:

    猜你喜欢
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    相关资源
    最近更新 更多