使用C#从字符串替换Unicode字符

时间:2018-08-17 08:07:13

标签: c# asp.net-mvc asp.net-mvc-4

string str = "our guests will experience \u001favor in an area";
 bool exists = str.IndexOf("\u001", StringComparison.CurrentCultureIgnoreCase) > -1;

我想在字符串中查找并替换此字符\ u001。我几乎没有解决问题,但仍然无奈。

请解决此问题。预先感谢您的宝贵帮助。

3 个答案:

答案 0 :(得分:2)

在C#规范的深处,您可以找到以下内容:

  

[注意:可以使用\ x十六进制转义序列产生   由于十六进制的数量可变,容易出错且难以阅读   \ x之后的数字。例如,在代码中:

     

string good =“ \ x9Good text”;

     

string bad =“ \ x9Bad text”;

     

乍看之下,开头字符可能与前面的字符相同(U + 0009,制表符)   两个字符串。实际上,第二个字符串都以U + 9BAD开头   单词“ Bad”中的三个字母是有效的十六进制数字。作为一个   关于样式,建议避免使用\ x,而建议   特定的转义序列(在此示例中为\ t)或   定长\ u转义序列。结束语]

还有:

  

unicode-escape-sequence ::

     

\ u十六进制数字十六进制数字十六进制数字十六进制数字

     

\ U十六进制数字十六进制数字十六进制数字十六进制数字十六进制数字十六进制数字   十六进制数字十六进制数字

为进一步简化,\ u后跟4或8个十六进制符号-非3 。您的字符串被解释为“我们的客人将在某个区域体验 \ u001f

答案 1 :(得分:0)

如果我们在第7.4.2节“ Unicode字符转义序列”中查看C#语言规范ECMA-334,则会发现

  

Unicode转义序列表示Unicode代码点。 Unicode转义序列在标识符(第7.4.3节),字符文字(第7.4.5.5节)和常规字符串文字(第7.4.5.6节)中进行处理。 Unicode转义序列不在任何其他位置进行处理(例如,形成一个运算符,标点符号或关键字)。

     

unicode-escape-sequence :: \ u十六进制数字十六进制数字十六进制数字十六进制数字
  \ U十六进制数字十六进制数字十六进制数字十六进制数字十六进制数字十六进制数字十六进制数字十六进制数字

因此,您必须在\u中使用四个十六进制数字。

在您的示例中,它以“ 001f”作为这四个十六进制数字。

示例中的"\u001"应该在Visual Studio中出现了“无法识别的转义序列”错误。

答案 2 :(得分:0)

使用正则表达式:

h1 {
  font: bold 200px arial, sans-serif;
  background-color: #565656;
  color: transparent;
  text-shadow: 2px 2px 3px rgba(255,255,255,0.5);
  -webkit-background-clip: text;
  -moz-background-clip: text;
  background-clip: text;
}

\ x1f替代\ uoo1f,应跳过前导零 https://www.regular-expressions.info/unicode.html#codepoint