A-A+

字符与字节

2018年10月28日 技术 暂无评论 阅读 2,510 次

我一直停留在很多年以前,还以为1个汉字顶2个英文,直到今天我把Javascript、Java、C#、MySQL全都试了一遍,才发现我一直停留在自己的幻想之中。

1. Javascript

2. Java

3. C#

4. MySQL

JavaScript语言采用Unicode字符集,但是只支持一种编码方法,JavaScript用的是UCS-2。但是UTF-16取代了UCS-2,或者说UCS-2整合进了UTF-16。所以,现在只有UTF-16,没有UCS-2。“?”这个字的长度为4个字节,Javascript会把它看做是两个字符,所以它的字符长度会等于2。

Java虚拟机和C#(确切的说是.NET平台)使用Unicode来表示字符,一律使用2字节存储一个字符,“?”这个字的长度为4个字节,所以其字符长度等于2。

MySQL有点特殊,在5.5.3版本之前,它是不支持4字节的字符存储的,后来增加了Utf8mb4编码格式,用来处理4字节存储。不论这个字符的字节长度是多少,只要使用CHAR_LENGTH这个函数来计算,它的字符长度都是1。所以在定义varchar、char的长度时,其实就是定义字符的长度,而不是字节的长度。

参考资料如下:

《ECMAScript 6 入门》

java的中文到底占几个字节?

Java一个汉字占几个字节(详解与原理)(转载)

.NET 中的字符编码

字符集UTF-8MB4

给我留言

Copyright © 字痕随行 保留所有权利.   Theme  Ality

用户登录

分享到: