String 当将utf-8编码的字符串从字节转换为字符时,计算机如何知道字符的结尾?
给定一个以UTF-8编码的Unicode字符串,它只是内存中的字节 如果计算机想将这些字节转换为相应的Unicode码点(数字),它如何知道一个字符的结束和另一个字符的开始?某些字符由1字节表示,其他字符最多由6字节表示。所以如果你有String 当将utf-8编码的字符串从字节转换为字符时,计算机如何知道字符的结尾?,string,unicode,utf-8,character-encoding,String,Unicode,Utf 8,Character Encoding,给定一个以UTF-8编码的Unicode字符串,它只是内存中的字节 如果计算机想将这些字节转换为相应的Unicode码点(数字),它如何知道一个字符的结束和另一个字符的开始?某些字符由1字节表示,其他字符最多由6字节表示。所以如果你有 00111101 10111001 这可能代表2个字符,或1个字符。计算机是如何决定正确解释它的?是否存在某种约定,从第一个字节我们可以知道当前字符使用了多少字节或其他什么?多字节序列的第一个字节以前导1位的数量对序列的长度进行编码: 0xxxxxxx本身就是
00111101 10111001
这可能代表2个字符,或1个字符。计算机是如何决定正确解释它的?是否存在某种约定,从第一个字节我们可以知道当前字符使用了多少字节或其他什么?多字节序列的第一个字节以前导1位的数量对序列的长度进行编码:
本身就是一个字符李>0xxxxxxx
是多字节字符的延续李>10xxxxxx
是2字节字符的第一个字节李>110xxxxx
是3字节字符的第一个字节李>1110xxxx
是4字节字符的第一个字节11110xxx
因此,问题中提出的示例有一个ASCII字符和一个连续字节,它们本身不编码字符。10年前UTF-8被限制为4个字节,您可能使用了一些过时的源代码。无论如何,这个方案解释得很好。这是一个古老的来源,但这并没有真正改变问题:)你有一个观点,维基百科很清楚