当前位置: 首页 > 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编码,然后保存即可。
在这里插入图片描述

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

http://www.xdnf.cn/news/406243.html

相关文章:

  • DeepSeek-R1-Distill-Qwen-1.5B代表什么含义?
  • 集成学习——Bagging,Boosting
  • 一个极简单的 VUE3 + Element-Plus 查询表单展开收起功能组件
  • android studio开发aar插件,并用uniapp开发APP使用这个aar
  • Java面试全记录:Spring Cloud+Kafka+Redis实战解析
  • 关于groom毛发attributes
  • 防火墙安全策略基础配置
  • 学习黑客BitLocker与TPM详解
  • 【大数据】MapReduce 编程--WordCount
  • AI赋能:构建个性化智能学习规划系统
  • Android 中 Handler (创建时)内存泄漏问题及解决方案
  • PDFMathTranslate:科学 PDF 文件翻译及双语对照工具
  • Web4X:站在Web4.0时代的起点,定义AI商业新生态
  • 专业知识的检索过程 stepbystep - 样例
  • ARM-CortexM固件升级相关问题研究
  • 采用AI神经网络降噪算法的通信语音降噪(ENC)模组性能测试和应用
  • 学习笔记:Conda 环境共享
  • 2025年SDK游戏盾技术深度解析:AI赋能下的DDoS/CC攻击防御革命
  • Html5新特性_js 给元素自定义属性_json 详解_浅克隆与深克隆
  • 模型上下文协议(MCP):AI的“万能插座”
  • Halcon案例(一):C#联合Halcon识别路由器上的散热孔
  • 【Vue3】使用vite创建Vue3工程、Vue3基本语法讲解
  • Windows 添加 hosts 映射
  • 零碳园区能源系统-多能互补体系
  • 星海智算云平台部署GPT-SoVITS模型教程
  • 傲云源墅:以五傲价值重构北京主城别墅格局
  • Spring MVC 和 Spring Boot 是如何访问静态资源的?
  • MySQL数据库表的约束
  • 反弹shell再入门
  • MySQL查询优化100条军规