码出高效:Java开发手册-第1章(2)

简介: 本书源于影响了全球250万名开发工程师的《阿里巴巴Java开发手册》,作者静心沉淀,对Java规约的来龙去脉进行了全面而彻底的内容梳理。本书以实战为中心,以新颖的角度全面阐述面向对象理论,逐步深入地探索怎样成为一位优秀开发工程师。比如:如何驾轻就熟地使用各类集合框架;如何得心应手地处理高并发多线程问题;如何顺其自然地写出可读性强、可维护性好的优雅代码。 本书旁征博引、文风轻松,秉持“图胜于表,表胜于言”的理念,深入浅出地将计算机基础、面向对象思想、JVM探源、数据结构与集合、并发与多线程、单元测试等知识客观、立体地呈现出来。紧扣学以致用......

1.3 字符集与乱码

      理解0 和1 的物理信号来源及数值表示方式后,如何将0 和1 表示成我们看到的文字呢?从26 个英文字母说起,大小写共52 个,加上10 个数字达到62 个,考虑到还有特殊字符(如:! @ # $ % ^ & * { } | 等)和不可见的控制字符,必然超过64 个,这又该如何表示呢?注意这里特别提到了“64”,因为它的特殊性,即2 的6 次方。使用刚才的0 与1 组合,至少是7 组连续的信号量。计算机在诞生之初对于存储和传输介质实在没有什么信心,所以预留了一个bit(位)用于奇偶校验,这就是1 个Byte(字节)由8 个bit 组成的来历,也就是ASCII 码。

      在ASCII 码中,有两个特殊的控制字符10 和13,前者是LF 即“\n”,后者是CR 即“\r”,在编码过程中,代码的换行虽然是默认不可见的,但在不同的操作系统中,表示方式是不一样的。在UNIX 系统中,换行使用换行符“\n”;在Windows 系统中,换行使用“\r\n”;在旧版macOS 中,换行使用回车符“\r”,在新版macOS 中使用与UNIX 系统相同的换行方式。如图1-7 所示,当前编码环境使用换行方式是LF,这也是推荐的换行方式,避免出现源码在不同操作系统中换行显示不同的情况。

1.jpg

图1-7 不同操作系统的换行方式

      再说汉字的字符集表示,首先汉字的个数远远超过英文字符的个数。毕竟ASCII码先入为主,必须在它基础上继续编码,也必须想办法和它兼容。一个字节只能表示128 个字符,所以采用双字节进行编码。早期使用的标准GB2312 收录了6763 个常用汉字。而GBK(K 是拼音kuò 的首字母,是扩展的意思)支持繁体,兼容GB2312。而后来的GB18030 是国家标准,在技术上是GBK 的超集并与之兼容。1994 年正式公布的Unicode,为每种语言中的每个字符都设定了唯一编码,以满足跨语言的交流,分为编码方式和实现方式。实现Unicode 的编码格式有三种:UTF-8、UTF-16、UTF-32,UTF(Unicode Transformation Format)即Unicode 字符集转换格式,可以理解为对Unicode 的压缩方式。根据二八原则,常用文字只占文字总数的20% 左右。其中,UTF-8 是一种以字节为单位,针对Unicode 的可变长度字符编码,用1 ~ 6 个字节对Unicode 字符进行编码压缩,目的是用较少的字节表示最常用的字符。此规则能有效地降低数据存储和传输成本。

      在日常开发中,字符集如果不兼容则会造成乱码。淘宝以前的系统都是GBK编码,而国际站使用的是UTF-8,在互相查看源码时,使用UTF-8 的IDE 环境打开GBK 源码,中文注释基本上都是不可读的乱码。乱码的出现场景并不止于编码环境中,还有网页展示、文本转换、文件读取等。数据流从底层数据库到应用层,到Web 服务器,再到客户端显示,每位开发工程师都会碰到字符乱码的问题,排查起来是一个比较长的链路。数据库是存储字符之源,在不同层次上都能够设置独立的字符集,如服务器级别、schema 级别、表级别甚至列级别。为了减少麻烦,所有情况下的字符集设置最好是一致的。



目录
打赏
0
0
0
0
28
分享
相关文章
|
4月前
|
如何使用Java开发抖音API接口?
在数字化时代,社交媒体平台如抖音成为生活的重要部分。本文详细介绍了如何用Java开发抖音API接口,从创建开发者账号、申请API权限、准备开发环境,到编写代码、测试运行及注意事项,全面覆盖了整个开发流程。
621 10
一天成为Java开发高手:用飞算JavaAI实现十倍提效
“一天成为Java开发高手”曾被视为天方夜谭,但飞算JavaAI的出现改变了这一局面。这款AI开发助手通过智能引导、需求分析、自动化逻辑处理和完整代码工程生成,大幅简化了Java开发流程。它不仅帮助新手快速上手,还让资深开发者提高效率,减少调试时间。现在,参与“飞算JavaAI炫技赛”,展示你的开发实力,赢取丰厚奖品!
如何使用Java语言快速开发一套智慧工地系统
使用Java开发智慧工地系统,采用Spring Cloud微服务架构和前后端分离设计,结合MySQL、MongoDB数据库及RESTful API,集成人脸识别、视频监控、设备与环境监测等功能模块,运用Spark/Flink处理大数据,ECharts/AntV G2实现数据可视化,确保系统安全与性能,采用敏捷开发模式,提供详尽文档与用户培训,支持云部署与容器化管理,快速构建高效、灵活的智慧工地解决方案。
智慧产科一体化管理平台源码,基于Java,Vue,ElementUI技术开发,二开快捷
智慧产科一体化管理平台覆盖从备孕到产后42天的全流程管理,构建科室协同、医患沟通及智能设备互联平台。通过移动端扫码建卡、自助报道、智能采集数据等手段优化就诊流程,提升孕妇就诊体验,并实现高危孕产妇五色管理和孕妇学校三位一体化管理,全面提升妇幼健康宣教质量。
44 12
Java高级应用开发:基于AI的微服务架构优化与性能调优
在现代企业级应用开发中,微服务架构虽带来灵活性和可扩展性,但也增加了系统复杂性和性能瓶颈。本文探讨如何利用AI技术,特别是像DeepSeek这样的智能工具,优化Java微服务架构。AI通过智能分析系统运行数据,自动识别并解决性能瓶颈,优化服务拆分、通信方式及资源管理,实现高效性能调优,助力开发者设计更合理的微服务架构,迎接未来智能化开发的新时代。
菜鸟之路day02-04拼图小游戏开发一一JAVA基础综合项目
本项目基于黑马程序员教程,涵盖面向对象进阶、继承、多态等知识,历时约24小时完成。项目去除了登录和注册模块,专注于单机游戏体验。使用Git进行版本管理,代码托管于Gitee。项目包含窗体搭建、事件监听、图片加载与打乱、交互逻辑实现、菜单功能及美化界面等内容。通过此项目,巩固了Java基础并提升了实际开发能力。 仓库地址:[https://gitee.com/zhang-tenglan/puzzlegame.git](https://gitee.com/zhang-tenglan/puzzlegame.git)
46 6
【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析
本文介绍了 Spring Boot 的核心概念和使用场景,并通过一个实战项目演示了如何构建一个简单的 RESTful API。
47 5
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
70 2

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等