什么是Unicode、UTF-8、UTF-16?
Unicode的基础是什么?为什么需要UTF-8或UTF-16? 我在谷歌上对此进行了研究,并在这里进行了搜索,但我并不清楚 在VSS中,在进行文件比较时,有时会显示一条消息,说明这两个文件具有不同的UTF。为什么会这样什么是Unicode、UTF-8、UTF-16?,unicode,encoding,utf-8,utf-16,Unicode,Encoding,Utf 8,Utf 16,Unicode的基础是什么?为什么需要UTF-8或UTF-16? 我在谷歌上对此进行了研究,并在这里进行了搜索,但我并不清楚 在VSS中,在进行文件比较时,有时会显示一条消息,说明这两个文件具有不同的UTF。为什么会这样 请简单解释。最初,Unicode旨在采用固定宽度的16位编码(UCS-2)。Unicode的早期采用者,如Java和Windows NT,围绕16位字符串构建其库 后来,Unicode的范围扩大到包括历史字符,这将需要超过16位编码所支持的65536个代码点。为了允许在使用UC
请简单解释。最初,Unicode旨在采用固定宽度的16位编码(UCS-2)。Unicode的早期采用者,如Java和Windows NT,围绕16位字符串构建其库 后来,Unicode的范围扩大到包括历史字符,这将需要超过16位编码所支持的65536个代码点。为了允许在使用UCS-2的平台上表示其他字符,引入了UTF-16编码。它使用“代理项对”来表示补充平面中的字符 同时,许多较旧的软件和网络协议使用8位字符串。UTF-8是为了使这些系统能够支持Unicode而不必使用宽字符。它向后兼容7位ASCII。为什么我们需要Unicode? 在(不太)早期,所有存在的都是ASCII码。这没关系,因为所需要的只是一些控制字符、标点符号、数字和字母,就像这句话中的那些。不幸的是,今天的全球交流和社交媒体的奇怪世界并没有被预见到,看到英语也不是很少见,汉语, עִבְרִית,ελληνικά,以及ភាសាខ្មែរ 在同一个文档中(我希望我没有破坏任何旧浏览器) 但为了论证起见,让我们假设Joe Average是一名软件开发人员。他坚持只需要英语,因此只想使用ASCII码。这对于用户Joe来说可能是好的,但是对于软件开发人员Joe来说却不是好的。世界上大约有一半的人使用非拉丁字符,而使用ASCII对这些人来说无疑是不体谅人的。除此之外,他正在将自己的软件与一个庞大且不断增长的经济体隔绝 因此,需要一个包含所有语言的字符集。Unicode就这样诞生了。它为每个字符分配一个称为代码点的唯一数字。与其他可能的集合相比,Unicode的一个优点是前256个代码点与相同,因此也是ASCII。此外,绝大多数常用字符仅可由两个字节表示,该区域称为。现在需要一个字符编码来访问这个字符集,正如问题所问,我将集中讨论UTF-8和UTF-16 内存注意事项 那么有多少字节可以访问这些编码中的哪些字符呢
- UTF-8:
- 1字节:标准ASCII码
- 2字节:阿拉伯文、希伯来文、大多数欧洲文字(最显著的除外)
- 3字节:BMP
- 4字节:所有Unicode字符
- UTF-16:
- 2字节:BMP
- 4字节:所有Unicode字符
- UTF-8:对于标准ASCII(0-127)字符,UTF-8代码是相同的。如果需要与现有ASCII文本向后兼容,这使得UTF-8非常理想。其他字符需要2-4字节。这是通过在每个字节中保留一些位来完成的,以指示它是多字节字符的一部分。特别是,每个字节的第一位是
,以避免与ASCII字符冲突1
- UTF-16:对于有效的BMP字符,UTF-16表示形式只是其代码点。但是,对于非BMP字符,UTF-16引入了代理项对。在这种情况下,两个双字节部分的组合映射到非BMP字符。这两个字节部分来自BMP数字范围,但Unicode标准保证作为BMP字符无效。此外,由于UTF-16有两个字节作为其基本单位,因此它受到以下因素的影响。为了进行补偿,可以在数据流的开头放置一个保留的字节顺序标记,该标记表示结束。因此,如果您正在读取UTF-16输入,并且未指定endianness,则必须对此进行检查
30 42 (hex) - > UTF8 encoding - > E3 81 82 (hex), which is above result in binary.
30 42 (hex) - > UTF16 encoding - > 30 42 (hex), which is above result in binary.