Unicode UTF-8字符串中是否可以包含空值(0x0)?

Unicode UTF-8字符串中是否可以包含空值(0x0)?,unicode,utf-8,Unicode,Utf 8,如果是,是否允许在字符串中的任何位置使用它?是,UTF-8将0x0定义为NUL。没有理由不能成为UTF-8流的一部分。RFC 3629专门涵盖了这种情况: 从U+0000到U+007F的字符数(US-ASCII指令集) 对应于八位字节00到7F(7位US-ASCII值)。直接的 结果是,普通ASCII字符串也是有效的UTF-8 绳子 正如您所知,有各种存储格式在编码NUL时遇到问题,因此有修改的UTF-8,它提供了一种替代编码,但“未修改的”UTF-8要求将其编码为0x0(将其编码为C080在第

如果是,是否允许在字符串中的任何位置使用它?

是,UTF-8将0x0定义为
NUL
。没有理由不能成为UTF-8流的一部分。RFC 3629专门涵盖了这种情况:

从U+0000到U+007F的字符数(US-ASCII指令集) 对应于八位字节00到7F(7位US-ASCII值)。直接的 结果是,普通ASCII字符串也是有效的UTF-8 绳子


正如您所知,有各种存储格式在编码
NUL
时遇到问题,因此有修改的UTF-8,它提供了一种替代编码,但“未修改的”UTF-8要求将其编码为0x0(将其编码为C080在第10节中明确称为非法UTF-8)。

用什么语言?在C语言中,空字符(不是
null
,它是一个空指针常量)标记字符串的结尾。其他语言可能允许字符串包含结尾以外的空字符。字符串没有“终止符”。终止符是字符串的某些特定表示形式的一部分;“字节数组,每个字符串字符一个字节,后跟一个空字节”。还有其他不使用终止符的字符串表示。@KeithThompson没有考虑任何语言,只是根据RFC中UTF-8编码的定义。UTF-8编码不依赖于编程语言。如果一种语言支持类似UTF-8的东西,但与UTF-8标准不同,那么它就是“修改的UTF-8”。我说的是一个未经修改的代码,它不依赖于任何特定的实现。0x0是UTF-8中的有效代码。@DavidZemens试错了什么?这个答案有误导性。不,NUL不能位于UTF-8字符串中的任意位置,扩展字节不能是NUL。它可能发生在流或缓冲区中,但不会发生在c字符串中。C字符串以NUL结尾,无论是否为utf-8。