嵌入式ASCII控制字符从字符串中删除

Mit*_*tch 1 c#

我在字符串中嵌入ASCII控制字符,由于某种原因,它们被剥离了.

例:

"a\x03b"[1]
// 59 ';'
"a\x03b".Length
// 2
Run Code Online (Sandbox Code Playgroud)

另一方面:

"a\x03mb"[1]
// 3 ''
"a\x03mb".Length
// 4
("a" + '\x03' + "b")[1]
// 3 ''
("a" + '\x03' + "b").Length
// 3
Run Code Online (Sandbox Code Playgroud)

ang*_*son 5

这个:

"a\x03b"
Run Code Online (Sandbox Code Playgroud)

是这个字符串:

 "ax"
   ^
   +- the single character with the unicode code point \x03b
Run Code Online (Sandbox Code Playgroud)

另一方面,这个:

"a\x03mb"
Run Code Online (Sandbox Code Playgroud)

是这个字符串:

"axmb"
  ^
  +- the single character with the unicode code point \x03
Run Code Online (Sandbox Code Playgroud)

在字符串中嵌入转义的unicode代码点时,请确保不能将以下字符理解为指定要编码的字符的十六进制值的一部分.

\x03b   <-- b is a valid hexadecimal character
\x03mb  <-- m is not, however, so the escaped character is just \x03
Run Code Online (Sandbox Code Playgroud)

用于指定字符文字文档可以这样说:

十六进制转义序列

意味着第2,第3和第4个十六进制数字是可选的.但是,编译器无法理解这"\x03b"应该是两个字符,'\x03'并且'b',您并不真正意味着这"\x03b"是单个字符'\0x3b'.

基本上,如果第2个,第3个和第4个字符是十六进制字符(0-9,AF),则它们被假定为转义代码点的一部分.

有没有办法确保你真正意味着'\x03'跟着'b'?当然,只需在转义的代码点前面填充足够的零位数,即可为其提供4个十六进制字符:

       +- the letter b
       |
"\x0003b"
 ^-+--^
   |
   +-- the single unicode code point \x0003 (or \x3, \x03, \x003)
Run Code Online (Sandbox Code Playgroud)