练习题与扩展阅读
练习题
基础题
- 请简述ASCII、GBK、UTF-8三种编码的区别和各自的优缺点。
- 计算字符串“Hello 世界!🌍“在以下编码中分别占用多少字节:
- ASCII编码
- GBK编码
- UTF-8编码
- UTF-16编码
- 乱码产生的根本原因是什么?列举3种常见的乱码场景和解决方案。
- 为什么UTF-8编码的文件不建议带BOM?BOM会带来什么问题?
实操题
- 编写一个程序,读取一个GBK编码的文本文件,将其转换为UTF-8编码保存。
- 写一个正则表达式,匹配所有符合邮箱格式的字符串,并用它提取一段文本中的所有邮箱地址。
- 遇到一个中文网页显示乱码,请列出你的排查步骤和解决思路。
- 写一个正则表达式,验证密码强度:必须包含大小写字母和数字,长度在8-16位之间。
思考题
- 既然UTF-8已经是事实标准了,为什么还会有GBK等编码存在?我们应该在什么情况下使用非UTF-8编码?
- 为什么MySQL的utf8不是真正的UTF-8?使用utf8mb4有什么注意事项?
- 编程中字符串处理时,“字节长度“和“字符长度“有什么区别?哪些场景下需要区分这两个概念?
扩展阅读
书籍推荐
-
《Unicode Explained》
- 全面深入讲解Unicode标准的方方面面
- 适合想要深入理解Unicode原理的开发者
-
《Mastering Regular Expressions》(精通正则表达式)
- 正则表达式领域的经典著作
- 从基础到高级,全面讲解正则表达式的原理和应用
- 适合想要系统学习正则的开发者
-
《编码:隐匿在计算机软硬件背后的语言》
- 第2章的内容和本书的编码部分可以互相印证
- 从更底层的角度讲解编码的本质
在线资源
-
- Unicode标准的官方文档,最权威的资料来源
- 可以查询所有字符的码位和属性
-
- 推广UTF-8编码的网站,讲解了为什么应该统一使用UTF-8
- 包含很多最佳实践和常见问题解答
-
- 在线正则表达式调试工具
- 支持多种语言的正则引擎,可视化显示匹配过程
- 学习和调试正则的必备工具
-
- 国内非常经典的正则入门教程
- 通俗易懂,适合零基础快速入门
工具推荐
- chardet / cchardet:Python库,自动检测文本的编码
- iconv:命令行工具,进行编码转换
- hexdump / xxd:命令行工具,查看文件的二进制内容
- Notepad++ / VS Code:文本编辑器,支持查看和转换文件编码
- Wireshark:网络抓包工具,可以查看网络传输的原始字节
参考答案
练习题的参考答案可以在附录/练习题参考答案.md中找到。建议先独立思考完成,再查看答案。