UTF-16 揭秘Java String中的字符编码,全程高能无废话 #安员外很有码

作者: 码场安员外分类: 计算机技术 发布时间: 2022-05-26 22:11:09 浏览:3924 次

UTF-16 揭秘Java String中的字符编码,全程高能无废话 #安员外很有码

布莱恩特-熊:
员外出品都是精品[打call][打call][打call]

卢雷克:
牛皮,看了这么多编码的视频,就这个给我整的明明白白的

小山嗦嗦:
Java为什么使用UTF-16,而不是更省内存的UTF-8

【回复】UTF-8有四种码长,不利于操作
【回复】utf-8并不只是一个字节,是最短一个字节,可变二个字节,仨字节,四字节
萝卜卜卜卜卜卜片:
通俗易懂很清晰,三连已发!Java用utf-16,为啥python用utf-32,不用更省空间的utf-8

【回复】许多年前 Unicode 的提出者天真地以为 16 位定长的字符可以容纳地球上所有仍具活力的文字,Java 设计者也深以为然。 参考 Unicode 设计,Java 设计者认为完全可以设计一个双字节数据类型来表达所有 Unicode 字符,于是便有了今天的原始数据类型 char。 但后来发现 65,536 个字符根本不足以表达所有文字,Java 5.0 版本既要支持 Unicode 4.0 同时要保证向后兼容性,不得不开始使用 UTF-16 作为内部编码方式,
弗朗克忠于职守:
请教一下大佬,java文件用utf-8输出中文为什么还是会有乱码?[思考]

fthlj:
java中的char类型只有两个字节大小 那如果一个汉字或者其它字符的码点值超过65536, 是不是char就不能表示这个汉字了。

【回复】回复 @哈哈hiii啊啊 : 用两个char表示, 那就是char数组了, 变成字符串了。
【回复】回复 @哈哈hiii啊啊 : “char类型变量可以存储单个字符“, 这种理解是错误的。 准确来说char类型存储的是utf-16的一个代码单元,而不是一个字符。 换句话说就是Unicode码点值,在65536以内的字符, char变量可以存储它, 对于码点值超过65536的字符, char变量无法存储它。 例如汉字 𠀾,𠀰还有emoji表情, char变量都无法存储。
【回复】可以表示啊 视频里面不是说了吗 用两个char表示 那个笑脸就是超过65535的
江同学mc:
Windows运行JAVA程序输出中文,显示的全是乱码,这个怎么办[笑哭]

【回复】可以试着调整一下Windows系统的默认编码,改成UTF-8试试
【回复】回复 @卢雷克 :NT内核是UTF-16,简体中文的codepage是936-GBK
账号已注销:
你好,请问既然代理区间不能存数据,那为什么2位还能存到65535?65535已经是全排列了

【回复】是说在这个代理区间,没有码点,也就是没有字符映射到这个区间,对于码点的值,大于65536的,使用映射算法,其实就是拆分加偏移,得到两个 char(16位)的,这两个十六位的正好在代理区间,这样在解析的时候,编译器看到这个char在代理区间,就知道他是4个字节,然后在往后读一个,然后两个拼起来(解码)就得到了原来的字符(码点)。
【回复】回复 @小温-学习版 : 那代理区间对应的码点(2048个)存在哪里呢,4字节的20位正好能存完65536以上的码点(1048576个),已经没位置了再存了吧
山姆丹妮:
请教个问题,为什么UTF-8比UTF-16的应用更广泛

【回复】因为它短♂小精悍。安员外的往期视频(BV1U5411d7FB)好像有讲
MiskuZero:
那代理区间对应的码点(2048个)存在哪里呢,4字节的20位正好能存完65536以上的码点(1048576个),已经没位置了再存了吧

【回复】回复 @啊-是阿能呀 :懂了,unicode在这部分就是单纯不定义字符,专门给utf–16准备的,字符集居然给编码方案让步,给具体方案让步也挺逆天的[笑哭]
【回复】那部分码点,是大家规定好的,专门用来做代理码点的,不对应任何字符

科技猎手 JAVA 计算机 编程 编码 string 打卡挑战 必剪创作 欢迎光临B站乐园

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

更多相关阅读