欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

一道面试题引发的思考:char类型能否存储汉字

程序员文章站 2022-03-27 21:04:35
阿里的一道电面题:char类型能否存储汉字百度随便搜一下答案就应该能出来能存储汉字。下面看下何为charchar 类型想必大家都比较熟悉了,java的八大类型之一,能存储两个字节,看情况讲道理应该能存储汉字,答案也是能的。char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字。unicode如其名字,统一码,万国码 国际通用码,它的出现就是为了屏蔽各个国家不同编码的差异,unicode用两个字节表示一个字符,仿佛一切问...

阿里的一道电面题:char类型能否存储汉字

百度随便搜一下答案就应该能出来能存储汉字。下面看下何为char

char 类型想必大家都比较熟悉了,java的八大类型之一,能存储两个字节,看情况讲道理应该能存储汉字,答案也是能的。

char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字。

unicode如其名字,统一码,万国码 国际通用码,它的出现就是为了屏蔽各个国家不同编码的差异,unicode用两个字节表示一个字符,仿佛一切问题都解决了,但是问题在于,原本可以用一个字节存储的英文字母在Unicode里面必须存两个字节(规则就是在原来英文字母对应ASCII码前面补0),这就产生了浪费。那么有没有一种既能消除乱码,又能避免浪费的编码方式呢?答案就是UTF-8! 

问题来了,大家都知道在GBK(国产编码)的编码下汉字是两个字节,但是在UTF-8情况下汉字为三个字节,那这个时候char还能存储一个汉字吗?答案还是可以的;

char类型能存储两个字节,UTF-8编码下汉字是三个字节,它是怎么存储的呢?这要分析下unicode和utf-8的关系

unicode编码中一个中文字符占2个字节,而UTF-8一个中文字符占3个字节。从unicode到uft-8并不是直接的对应,而是要过一些算法和规则来转换。 
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。 
用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件。

从上我们可以知道char类型并非存储的是utf-8而是转换后的unicode,今天怎么对应的这里不做详解可看下面参考链接

参考:

https://blog.csdn.net/cafucwxy/article/details/81637066

本文地址:https://blog.csdn.net/UnknownZYB/article/details/107448754