字符编码基本知识

173 阅读4分钟

字符编码

该知识点理论特别多 但是结论很少 代码使用也很短
1.字符编码只针对文本数据
2.回忆计算机内部存储数据的本质
3.既然计算机内部只认识01 为什么我们却可以敲出人类各式各样的字符
	肯定存在一个数字跟字符的对应关系 存储该关系的地方称为>>>:字符编码本
4.字符编码发展史
	4.1.一家独大
    	计算机是由美国人发明的 为了能够让计算机识别英文
    	需要发明一个数字跟英文字母的对应关系
		ASCII码:记录了英文字母跟数字的对应关系
        	用8bit(1字节)来表示一个英文字符
            
 	4.2.群雄割据
    	中国人
        GBK码:记录了英文、中文与数字的对应关系
       	 	用至少16bit(2字节)来表示一个中文字符
            	很多生僻字还需要使用更多的字节
           英文还是用8bit(1字节)来表示
       日本人
    	  shift_JIS码:记录了英文、日文与数字的对应关系
    	韩国人
         Euc_kr码:记录了英文、韩文与数字的对应关系
  		"""
  		每个国家的计算机使用的都是自己定制的编码本		
  			不同国家的文本数据无法直接交互 会出现"乱码"
  		"""
  	4.3.天下一统
    	unicode万国码
        	 兼容所有国家语言字符
  			  起步就是两个字节来表示字符 
  		utf系列:utf8 utf16 ...
            专门用于优化unocide存储问题
            英文还是采用一个字节 中文三个字节

image

字符编码实操

1.针对乱码不要慌 切换编码慢慢试即可
2.编码与解码
	编码:将人类的字符按照指定的编码编码成计算机能够读懂的数据
        字符串.encode()
 	解码:将计算机能够读懂的数据按照指定的编码解码成人能够读懂
        bytes类型数据.decode()
3.python2与python3差异
	python2默认的编码是ASCII
		1.文件头
        	# encoding:utf8
    	2.字符串前面加u
        	u'你好啊'
 	python3默认的编码是utf系列(unicode)

字典操作练习

## 练习描述  
```python
1.员工管理系统
  字典或者数据的嵌套使用完成更加完善的员工管理
2.去重下列列表并保留数据值原来的顺序
	eg: [1,2,3,2,1] 去重之后 [1,2,3]
	l1 = [2,3,2,1,2,3,2,3,4,3,4,3,2,3,5,6,5]
3.有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
  pythons={'jason','oscar','kevin','ricky','gangdan','biubiu'}
  linuxs={'kermit','tony','gangdan'}
  1. 求出即报名python又报名linux课程的学员名字集合
  2. 求出所有报名的学生名字集合
  3. 求出只报名python课程的学员名字
  4. 求出没有同时这两门课程的学员名字集合
4.统计列表中每个数据值出现的次数并组织成字典战士
	eg: l1 = ['jason','jason','kevin','oscar']
      结果:{'jason':2,'kevin':1,'oscar':1}
	真实数据
    	l1 = ['jason','jason','kevin','oscar','kevin','tony','kevin']

题解

# 练习1
"""用户系统 """

user_number = 1 # 用户数
user_massage = {
    0: {'name': 'jason', 'password': '123', 'age': '20'}} # 用户信息字典
while True:
    user_choose = input('''
————————————————————
输入1执行添加用户名功能
输入2执行查看所有用户名功能
输入3执行删除指定用户名功能
————————————————————-
请输入>>>:\
''').strip()
    if user_choose == '1':
        name = input('请输入姓名:').strip()
        password = input('定义一个密码:').strip()
        age = input('请输入您的年龄:').strip()
        one_user_massage = {}
        one_user_massage['name'] = name
        one_user_massage['password'] = password
        one_user_massage['age'] = age
        user_massage[user_number] = one_user_massage
        print(user_massage)
        user_number += 1
        print(f'当前有{user_number}个用户')
    elif user_choose == '2':
        print('姓名  密码  年龄')
        for i in user_massage:
            temporary_dict = user_massage[i]
            print(f"{temporary_dict['name']} {temporary_dict['password']} {temporary_dict['age']}")
    elif user_choose == '3':
        for i in user_massage:
            temporary_dict = user_massage[i]
            print(f"{temporary_dict['name']}", end=' ')
        print()
        del_name = input('请输入你要删除的用户名字>>:').strip()
        for i in list(user_massage):  # 在字典遍历的时候 不能修改字典元素 RuntimeError: dictionary changed size during iteration
            if del_name == user_massage[i]['name']:
                del user_massage[i]
                print('已删除=。=')
# 练习2
old_list = [2, 3, 2, 1, 2, 3, 2, 3, 4, 3, 4, 3, 2, 3, 5, 6, 5]
new_list = []
for num in old_list:
    if num not in new_list:
        new_list.append(num)
print(new_list)

# 练习3
pythons = {'jason', 'oscar', 'kevin', 'ricky', 'gangdan', 'biubiu'}
linuxs = {'kermit', 'tony', 'gangdan'}
print(pythons & linuxs)
print(pythons | linuxs)
print(pythons - linuxs)
print(pythons ^ linuxs)

# 练习4
mixed_list = ['jason', 'jason', 'kevin', 'oscar', 'kevin', 'tony', 'kevin']
clear_list = []  # 装有不重复的用户名
times = 0  # 对单个用户的计数
user_dict = {}  # 结果的字典
for user in mixed_list:
    if user not in clear_list:
        clear_list.append(user)

for user in clear_list:
    for mix_user in mixed_list:
        if user == mix_user:
            times += 1
    user_dict[user] = times
    times = 0
print(user_dict)