.Net 转义字符

.net常见转义字符, 放在这里备查.

http://msdn.microsoft.com/zh-cn/library/ms228362.aspx

 

 

转义序列

字符名称

Unicode 编码

/'

单引号

0x0027

/"

双引号

0x0022

//

反斜杠

0x005C

/0

Null

0x0000

/a

警报

0x0007

/b

Backspace

0x0008

/f

换页

0x000C

/n

换行

0x000A

/r

回车

0x000D

/t

水平制表符

0x0009

/U

代理项对的 Unicode 转义序列。

/Unnnnnnnn

/u

Unicode 转义序列

/u0041 = "A"

/v

垂直制表符

0x000B

/x

Unicode 转义序列类似于“/u”,只是长度可变。

/x0041 = "A"

<think> 我们正在讨论VB.NET中的空字符(null character)。空字符在VB.NET中通常指ASCII值为0的字符,即`Chr(0)`或`\0`。在字符串中,空字符有时用作字符串的终止符(尽管在.NET中字符串并不以空字符结尾)或作为特殊分隔符。 关键点: 1. **表示方式**: - 使用`Chr(0)`函数:`Dim nullChar As Char = Chr(0)` - 使用转义序列(在字符串字面量中):`Dim s As String = "a" & vbNullChar & "b"` 或 `Dim s As String = "a\0b"`(注意:VB.NET中字符串内不能直接使用`\0`,但可以通过`Chr`函数或`vbNullChar`常量) 2. **常量**: - VB.NET提供了常量`vbNullChar`表示空字符,等价于`Chr(0)`。 3. **在字符串中的行为**: - 空字符在VB.NET字符串中是允许存在的,因为.NET字符串是Unicode字符串,可以包含任意字符(包括空字符)。 - 但是,当与一些旧式API(如Windows API)交互时,它们可能将空字符视为字符串的结束符。因此,在传递包含空字符的字符串给这些API时,可能会被截断。 4. **与空引用(Nothing)的区别**: - 空字符是一个字符,而空引用(Nothing)表示对象引用为空。例如: - `Dim c As Char = Nothing` 表示字符变量c没有被初始化(对于值类型,Nothing表示默认值,对于Char是`Chr(0)`)。 - 但是注意:字符串变量可以设置为Nothing(表示没有字符串对象),而空字符串(`""`)是一个长度为0的字符串对象。 5. **使用场景**: - 与需要以空字符结尾的字符串的API交互(如某些Win32 API)。 - 在二进制数据与字符串混合处理时(但通常不建议,因为字符串是Unicode,二进制数据可能会被错误解释)。 6. **注意事项**: - 在字符串比较中,空字符和其他字符一样参与比较。例如:`"a" & vbNullChar`和`"a"`是不相等的。 - 当使用函数如`Strings.Split`时,空字符也可以作为分隔符使用。 示例代码: ```vb.net ' 创建一个包含空字符的字符串 Dim strWithNull As String = "Hello" & vbNullChar & "World" ' 输出:Hello World(注意:在控制台输出时,空字符可能不显示或显示为一个空格?但实际上它是空字符) Console.WriteLine(strWithNull) ' 输出:HelloWorld(因为空字符不会被显示,但实际字符串中是存在的) ' 获取字符串长度 Console.WriteLine(strWithNull.Length) ' 输出:11("Hello"5个字符,空字符1个,"World"5个,共11) ' 使用Split按空字符分割 Dim parts() As String = strWithNull.Split(vbNullChar) Console.WriteLine(parts(0)) ' 输出:Hello Console.WriteLine(parts(1)) ' 输出:World ' 注意:空字符在字符串中间和末尾的处理 Dim endsWithNull As String = "End" & vbNullChar parts = endsWithNull.Split(vbNullChar) Console.WriteLine(parts(0)) ' 输出:End Console.WriteLine(parts(1)) ' 输出:空字符串(因为空字符后面没有字符,所以分割后得到一个空字符串) ``` 7. **与C/C++的区别**: - 在C/C++中,空字符`\0`用于标记字符串的结束。但在.NET中,字符串是对象,有长度属性,因此可以包含空字符,并且不会因为空字符而提前结束。 8. **安全考虑**: - 当从不可信源接收包含空字符的字符串时,可能会引发安全问题(例如,在拼接字符串用于文件路径时,空字符可能导致截断,从而可能被用于路径遍历攻击)。因此,在处理用户输入时,应谨慎处理空字符。 引用说明:在VB.NET中,可以使用`vbNullChar`常量表示空字符[^1]。 §§相关问题§§ 1. VB.NET中如何表示和操作空字符? 2. 空字符在字符串处理中可能引发哪些问题? 3. 如何安全地处理包含空字符的字符串? 4. VB.NET中字符串与C语言风格字符串(以空字符结尾)如何互操作? </think>在 VB.NET 中,空字符(Null Character)是指 ASCII 值为 0 的字符(`Chr(0)` 或 `\0`),用于表示**字符串结束标记**或**特殊分隔符**。以下是关键知识点: --- ### 1. **空字符的表示与创建** ```vb.net ' 使用 Chr() 函数创建 Dim nullChar As Char = Chr(0) ' 在字符串中使用常量 vbNullChar Dim text As String = "Hello" & vbNullChar & "World" ' "Hello\0World" ``` --- ### 2. **核心用途** - **字符串终止符** 在传统 C 语言中表示字符串结束,但在 .NET 中**字符串自带长度属性**,无需依赖空字符。 ```vb.net Dim s As String = "ABC" & Chr(0) & "DEF" Console.WriteLine(s.Length) ' 输出 7(包含空字符) ``` - **API 交互** 与 Win32 API 交互时,某些函数要求以空字符结尾的字符串: ```vb.net Declare Function MessageBox Lib "user32" Alias "MessageBoxA" ( hWnd As Integer, text As String, ' 自动添加空字符结尾 caption As String, type As Integer ) As Integer ``` - **二进制数据处理** 在字节数组和字符串转换时可能出现: ```vb.net Dim bytes As Byte() = {65, 66, 67, 0, 68} ' "ABC\0D" Dim str As String = Encoding.ASCII.GetString(bytes) ``` --- ### 3. **特殊行为与注意事项** | 场景 | 行为 | |------|------| | **字符串比较** | `"A" & Chr(0) = "A"` → `False`(空字符参与比较) | | **字符串函数** | `Substring`、`IndexOf` 等会将空字符视为普通字符 | | **序列化/传输** | 空字符可能导致数据截断(如数据库或网络协议) | | **安全风险** | 可能被用于注入攻击(需验证输入) | --- ### 4. **检测与处理** ```vb.net ' 检测空字符 Dim input As String = "Test" & vbNullChar & "Data" If input.Contains(Chr(0)) Then Console.WriteLine("包含空字符") End If ' 替换/移除空字符 Dim cleaned As String = input.Replace(vbNullChar, "") ``` --- ### 5. **与 `Nothing` 和空字符串的区别** | 类型 | 含义 | 示例 | |------|------|------| | **空字符 (`Chr(0)`)** | ASCII 0 的字符 | `"A\0B"` | | **空引用 (`Nothing`)** | 未初始化的对象引用 | `Dim s As String = Nothing` | | **空字符串 (`""`)** | 长度为零的字符串 | `String.Empty` | > 引用说明:在 VB.NET 中,空字符由常量 `vbNullChar` 表示,通常用于兼容旧式 API 或特殊数据格式[^1]。字符串函数会明确处理空字符,而非将其视为终止符[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值