当前位置: 首页 > news >正文

GBK与UTF-8编码问题(1)

1. 问题现象

  我们在编译.py的python代码时,有时会遇到如下图这种问题。提示说“SyntaxError: (unicode error) ‘utf-8’ codec can’t decode byte 0xc4 in position 0: invalid continuation byte”,代码中有中文字符,这似乎和文件的编码方式有关。
在这里插入图片描述

2. 原因分析

  我们查了一下关于utf-8的编码解释。
• ASCII:仅支持英文字母、数字和基本符号(共 128 个字符),无法表示非英语字符。
• UTF-8:支持全球所有 Unicode 字符(超过 140,000 个字符),是一种针对 Unicode 的可变长度字符编码,包括中文、日文、阿拉伯文等。
• GBK/GB2312:中国国家标准,仅支持中文及少数其他字符,不兼容其他语言。
  示例:
• 字符 A 的编码:
 o ASCII/UTF-8:0x41(1 字节)
• 中文字符 “你” 的编码:
 o UTF-8:0xE4 BD A0(3 字节)
 o GBK:0xC4 E3(2 字节)
  因此出现上述编译问题,就是因为.py文件的编码方式与Python 解释器的编码解析方式不同导致。

3. 解决方法

  解决此问题有两种简单方法:
(1)在 Python 代码第1行,加入 # --coding:GBK -- ,一种指定源文件编码格式的特殊注释,也称为编码声明(coding declaration)。它的作用是告诉 Python 解释器当前文件使用GBK 编码保存,这样解释器才能正确解析文件中的非 ASCII 字符(如中文)。如下图,这时编译就不会报错了。
在这里插入图片描述

  编码声明必须放在 Python 文件的首行或第二行,有以下几种等效写法:

# -*- coding: GBK -*-  # Emacs风格
# coding: GBK          # 简洁风格
# encoding: GBK        # 同上

  不过如果.py文件不是GBK 编码保存的,那也有可能还会编译出错,这时我们可以尝试第2种方法。

(2)因为Python 3.x 默认使用 UTF-8 编码解析源代码,因此我们只要将.py文件转换成UTF-8 编码,那么也能保证正常编译。可以利用Notepad++软件打开.py文件,点击菜单栏编码,再点击转为UTF-8编码,然后保存即可。
在这里插入图片描述

  这时再编译,也不会报错了。
在这里插入图片描述

相关文章:

  • 如何使用 Winget 命令安装 Microsoft Teams
  • C盘扩容方法:如何扩展不相邻的分区?
  • 交易流水表的分库分表设计
  • 生产管理有效管控的要点有哪些,四点法的实践路径与操作指南
  • Qt元对象系统总结
  • 贝叶斯算法
  • xss-lab靶场4-7关基础详解
  • Python文字转语音TTS库示例(edge-tts)
  • 如何避免Java中的ConcurrentModificationException
  • Redisson在业务处理中失败后的应对策略:保障分布式系统的可靠性
  • Java 线程的堆栈跟踪信息
  • 从零开始掌握FreeRTOS(序)裸机与RTOS的区别
  • python打卡day23@浙大疏锦行
  • 2.2 微积分的解释
  • 在嵌入式调试中IAR提示Fatal error: CPU did not power up Session aborted!怎么回事?怎么解决?
  • window 显示驱动开发-将虚拟地址映射到内存段(二)
  • Matlab 垂向七自由度轨道车辆开关型半主动控制
  • 1688平台开放接口实战:如何通过API获取店铺所有商品数据(Python示例)‌
  • 【C++贪心】P11044 [蓝桥杯 2024 省 Java B] 食堂|普及
  • android特许权限调试
  • 继71路之后,上海中心城区将迎来第二条中运量公交
  • 秦洪看盘|预期改善,或迎来新的增量资金
  • 第12届警博会在即:一批便民利企装备亮相,规模创历史新高
  • 《单身情歌》制作人韩贤光去世,林志炫发文悼念
  • 当我们提起拉动消费时,应该拉动什么消费?
  • 巴基斯坦称未违反停火协议