python 编码 问题 UTF-8 unicode

本文深入解析Python处理包含中文的字符串时,如何正确选择和声明编码,避免解释错误,并详细介绍了ASCII、UNICODE、UTF-8、GB2312等编码方式及其在Python中的应用。同时,提供了几个关键的编码常数,帮助读者快速掌握常见编码的表示形式。

每次遇到python处理含有中文的字符串时,utf-8, unicode, gb2312这些名词总是跳出来捣乱,然后经过网上一番搜索和烦恼的测试之后,才能最终解决问题。

可是,但是,可但是,这个问题在再一次遇到的时候,又是一番重复,烦不胜烦之下,记在案,常常来温习一下。(难道是我脑子不好了,没记性了,疲了???)

 

一些名词

ASCII - 一种编码方式

UNICODE - 又一种编码方式

UTF-8 - 又一种编码方式

Little endian和Big endian - 编码的“码”是如何存放的,从小到大还是从大到小

GB2312 - 汉字编码的一种,

代码页 -就是代码页

 

到这里看看就明白了,别的地方都不需要再看了

http://wiki.woodpecker.org.cn/moin/PyInChinese

 

 

关键的地方:如果python源文件中出现非ascii字符串,就需要指定编码声明

如果你的代码中出现:s = u"大a小",python大概要用编码声明,大概啊就要用编码声明去将字符串s转换为PyUnicodeObject

如果你编码声明为utf-8,而文件保存的格式不是utf-8,那么python解释就会出错。

如果你编码声明为gbk,那么,很好,你python源文件保存可以了,操作系统保存中文就是用系统的缺省编码保存的。

不论你的编码是什么,如果你在脚本执行过程中读入一个文件,那么这个就不是python在解释你的脚本,而是脚本的执行了。

这个文件的编码格式只有你知道,你把这个文件的内容送给一个字符串,是需要decode还是encode就只有你自己知道了。

 

 

几个常数,背下来有好处

D1 CF 严GB2312编码

严Unicode 编码是4E25。

严的UTF-8: E4B8A5

 

0x3f800000=1.0

0x3f333333=0.7

01 03 00 00 00 01 =  0a 84

01 03 00 01 00 01 =  ca d5

 

 

 

### Unicode 编码转换为 UTF-8 的方法 在 Python 中,可以通过 `encode` 和 `decode` 方法来完成 UnicodeUTF-8 的相互转换。以下是详细的说明以及代码示例。 #### 使用 encode 方法将 Unicode 转换为 UTF-8 字节流 当需要将一个 Unicode 字符串转换成字节形式时,可以调用字符串对象的 `.encode()` 方法,并指定目标编码格式为 `'utf-8'`[^2]。此操作会返回该字符串对应的字节数组表示。 ```python text = "你好,世界!" byte_data = text.encode('utf-8') print(f"Byte data: {byte_data}") # 输出 b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c\xef\xbc\x81' ``` #### 使用 decode 方法将 UTF-8 字节流转回 Unicode 字符串 如果有一个以 UTF-8 形式的字节数组,则可通过 `.decode('utf-8')` 来将其解码还原成为原始的 Unicode 文本。 ```python decoded_text = byte_data.decode('utf-8') print(f"Decoded Text: {decoded_text}") # 输出 '你好,世界!' ``` #### 文件读写的例子 对于实际应用中的文件存储场景,也可以利用内置函数轻松实现数据持久化与恢复过程: ```python # 写入UTF-8编码的数据至文件 with open('output.txt', 'w', encoding='utf-8') as writer: writer.write(text) # 从文件中读取并验证内容一致性 with open('output.txt', 'r', encoding='utf-8') as reader: loaded_content = reader.read() assert loaded_content == text, "Data mismatch!" ``` 另外,在涉及 JSON 序列化的场合下,为了保持非 ASCII 字符不被转义,推荐设置参数 `ensure_ascii=False`[^3]^: ```python import json data = {"message": "你好"} json_str = json.dumps(data, ensure_ascii=False) print(json_str) # '{"message": "你好"}' ``` 以上即是在 Python 环境里处理 UnicodeUTF-8 及反向流程的具体方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值