Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 为什么Utf8与ascii兼容_String_Utf 8_Ascii - Fatal编程技术网

String 为什么Utf8与ascii兼容

String 为什么Utf8与ascii兼容,string,utf-8,ascii,String,Utf 8,Ascii,UTF-8中的A是U+0041拉丁文大写字母AA是065 UTF-8如何与ASCII向后兼容?ASCII仅使用8位字节的前7位。因此,从00000000到01111111的所有组合。此范围内的所有128字节都映射到特定字符 UTF-8保留这些精确映射。ASCII中由011101011表示的字符在UTF-8中也由相同的字节表示。所有其他字符以多个字节的序列编码,其中每个字节具有最高的位集;i、 e.UTF-8中所有非ASCII字符的每个字节的格式为1xxxxxx为什么: 因为所有东西都已经是ASC

UTF-8中的
A
U+0041拉丁文大写字母A
A是
065


UTF-8如何与ASCII向后兼容?

ASCII仅使用8位字节的前7位。因此,从
00000000
01111111
的所有组合。此范围内的所有128字节都映射到特定字符

UTF-8保留这些精确映射。ASCII中由
011101011
表示的字符在UTF-8中也由相同的字节表示。所有其他字符以多个字节的序列编码,其中每个字节具有最高的位集;i、 e.UTF-8中所有非ASCII字符的每个字节的格式为
1xxxxxx

为什么:

因为所有东西都已经是ASCII格式,并且具有向后兼容的Unicode格式,所以采用起来更容易。将程序转换为使用UTF-8要比转换为UTF-16容易得多,而且该程序通过仍然使用ASCII来继承向后兼容的特性

如何:

ASCII是一种7位编码,但总是以8位字节的形式存储。这意味着1位一直未使用


UTF-8只是使用额外的位来表示非ASCII字符。

Unicode与ASCII向后兼容,因为ASCII是Unicode的子集。Unicode只是简单地使用ASCII中的所有字符代码,并添加了更多内容

虽然字符代码在Unicode中通常写为0041,但字符代码是数字的,因此0041的值与(十六进制)41的值相同

UTF-8不是字符集,而是与Unicode一起使用的编码。它恰好也与ASCII兼容,因为用于多字节编码的代码位于未使用的ASCII字符集中


请注意,只有7位ASCII字符集与Unicode和UTF-8兼容,即基于ASCII的8位字符集,如IBM850和windows-1250,使用UTF-8具有多字节编码代码的字符集部分。

任何ASCII编码的文本文件都可以解码为UTF-8以获得完全相同的结果。您正在比较十进制和十六进制。65十二月=41十六进制。utf-8几乎总是以十六进制列出。您能否解释一下,如果只支持ASCII文件的应用程序读取UTF8文件,会发生什么情况。具体来说,当它读取0041(十六进制)的第一个字节时,它应该做什么。“0041”到底是什么意思?Unicode字符U+0041?字节序列
0x00 0x41
?如果是前者,那就是后一个“A”,它以UTF-8编码,与ASCII编码相同,因此根本没有问题。如果是后者,那将是一个
NUL
字节,后跟“a”,这在ASCII中与UTF-8中相同。我认为您还没有完全理解这一点,我建议您阅读“注意,只有7位ASCII字符集与Unicode和UTF-8兼容”:您应该删除对Unicode的提及,否则您必须定义“兼容”在本文中的含义