Unicode的基础是什么?为什么需要UTF-8或UTF-16? 我在谷歌上研究过这个,也在这里搜索过,但我不清楚。
在VSS中,当进行文件比较时,有时会有一个消息说两个文件有不同的UTF。为什么会这样呢?
请简单解释一下。
Unicode的基础是什么?为什么需要UTF-8或UTF-16? 我在谷歌上研究过这个,也在这里搜索过,但我不清楚。
在VSS中,当进行文件比较时,有时会有一个消息说两个文件有不同的UTF。为什么会这样呢?
请简单解释一下。
当前回答
UTF代表Unicode转换格式。基本上,在当今世界,有数百种其他语言编写的脚本,这些脚本的格式不包括在以前使用的基本ASCII中。因此,UTF应运而生。
UTF-8具有字符编码功能,其代码单位为8位,而UTF-16为16位。
其他回答
ASCII -软件仅为给定字符在内存中分配8位字节。它适用于英语,并采用(外来词façade)字符,因为它们对应的十进制值小于128。示例C程序。
UTF-8 - Software allocates one to four variable 8-bit bytes for a given character. What is meant by a variable here? Let us say you are sending the character 'A' through your HTML pages in the browser (HTML is UTF-8), the corresponding decimal value of A is 65, when you convert it into decimal it becomes 01000010. This requires only one byte, and one byte memory is allocated even for special adopted English characters like 'ç' in the word façade. However, when you want to store European characters, it requires two bytes, so you need UTF-8. However, when you go for Asian characters, you require minimum of two bytes and maximum of four bytes. Similarly, emojis require three to four bytes. UTF-8 will solve all your needs.
UTF-16将为每个字符分配最少2字节和最多4字节,它不会分配1或3字节。每个字符用16位或32位表示。
那么UTF-16为什么存在呢?最初,Unicode是16位而不是8位。Java采用了UTF-16的原始版本。
简而言之,除非您正在使用的语言或平台已经采用了UTF-16,否则在任何地方都不需要它。
web浏览器调用的Java程序使用UTF-16,但web浏览器发送字符使用UTF-8。
Unicode是一种将所有语言中的字符映射到称为码位的特定数值的标准。它这样做的原因是它允许使用相同的代码点集进行不同的编码。
UTF-8和UTF-16就是两种这样的编码。它们将代码点作为输入,并使用一些定义良好的公式对它们进行编码,以生成编码后的字符串。
选择特定的编码取决于您的需求。不同的编码有不同的内存要求,根据将要处理的字符,应该选择使用最少字节序列来编码这些字符的编码。
有关Unicode, UTF-8和UTF-16的更多详细信息,您可以查看这篇文章,
关于Unicode,每个程序员都应该知道的
文章什么每个程序员绝对,积极地需要知道编码和字符集来处理文本解释了所有的细节。
写入缓冲区
如果你写入一个4字节的缓冲区,符号あUTF8编码,你的二进制将看起来像这样:
00000000 11100011 10000001 10000010
如果你写入一个4字节的缓冲区,使用UTF16编码的符号あ,你的二进制将看起来像这样:
00000000 00000000 00110000 01000010
正如你所看到的,根据你在内容中使用的语言,这将相应地影响你的记忆。
示例:对于这个特定的符号:あUTF16编码更有效,因为我们有2个空闲字节用于下一个符号。但这并不意味着你必须使用UTF16来表示日本字母。
从缓冲区读取
现在,如果你想读取上面的字节,你必须知道它是用什么编码写的,并正确解码回来。
例:如果你解码这个: 00000000 11100011 10000001 10000010 转换为UTF16编码,你将得到臣而不是あ
注意:Encoding和Unicode是两个不同的东西。Unicode是一个大(表),每个符号都映射到一个唯一的码点。例如,あ符号(字母)有一个(码位):30 42(十六进制)。另一方面,编码是一种将符号转换为更合适的方式的算法,当存储到硬件时。
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.
UTF代表Unicode转换格式。基本上,在当今世界,有数百种其他语言编写的脚本,这些脚本的格式不包括在以前使用的基本ASCII中。因此,UTF应运而生。
UTF-8具有字符编码功能,其代码单位为8位,而UTF-16为16位。
Unicode是一个相当复杂的标准。不要太害怕,但要做 为一些工作做准备![2]
因为总是需要可靠的资源,但官方报告非常庞大,我建议阅读以下内容:
每个软件开发人员必须绝对、肯定地了解Unicode和字符集(没有借口!)Stack Exchange首席执行官Joel Spolsky的介绍。 为BMP和超越!Unicode联盟的技术总监,后来的副总裁Eric Muller的教程(前20张幻灯片就完成了)
简要说明:
计算机读取字节,而人读取字符,因此我们使用编码标准将字符映射到字节。ASCII是第一个被广泛使用的标准,但只包含拉丁语(7位/字符可以代表128个不同的字符)。Unicode是一个标准,目标是覆盖世界上所有可能的字符(最多可以容纳1,114,112个字符,意味着每个字符最多21位。当前的Unicode 8.0总共指定120,737个字符,仅此而已)。
主要的区别是ASCII字符可以容纳一个字节(8位),但大多数Unicode字符不能。所以使用编码形式/方案(如UTF-8和UTF-16),字符模型是这样的:
Every character holds an enumerated position from 0 to 1,114,111 (hex: 0-10FFFF) called a code point. An encoding form maps a code point to a code unit sequence. A code unit is the way you want characters to be organized in memory, 8-bit units, 16-bit units and so on. UTF-8 uses one to four units of eight bits, and UTF-16 uses one or two units of 16 bits, to cover the entire Unicode of 21 bits maximum. Units use prefixes so that character boundaries can be spotted, and more units mean more prefixes that occupy bits. So, although UTF-8 uses one byte for the Latin script, it needs three bytes for later scripts inside a Basic Multilingual Plane, while UTF-16 uses two bytes for all these. And that's their main difference. Lastly, an encoding scheme (like UTF-16BE or UTF-16LE) maps (serializes) a code unit sequence to a byte sequence.
性格:π 代码点:U+03C0 编码形式(编码单位): utf-8: cf 80 utf - 16: 03 c0 编码方案(字节): utf-8: cf 80 utf-16be: 03 c0 utf-16le: c0 03
提示:十六进制数字代表四位,所以两位十六进制数字代表一个字节。 也可以看看维基百科上的平面地图,了解一下字符集布局。