Python中如何将GB2312编码的字符串转换回汉字
服务器传过来的字符串是人名使用 gb2312 编码后的字符串,例如:%BB%C6%B3%C9%CE%C4,黄成文,现在我要用 Python 把这个字符串转回汉字,求教怎么办?
网上看到有这种办法:正则匹配 \%[A-F0-9]{2} 然后取出对应的 16 进制字符串,转换为相应的字符编码,再求出对应字符,最后替换原字符~
有没有更好的办法,或者大神给个函数,谢谢
Python中如何将GB2312编码的字符串转换回汉字
4 回复
urllib.parse.unquote
# 核心解决方案:使用decode()方法
gb2312_str = b'\xC4\xE3\xBA\xC3' # 这是"你好"的GB2312编码字节串
chinese_str = gb2312_str.decode('gb2312')
print(chinese_str) # 输出:你好
# 完整处理流程示例
def gb2312_to_chinese(byte_data):
"""
将GB2312编码的字节数据转换为中文字符串
参数:
byte_data: bytes类型,GB2312编码的字节数据
返回:
str类型,转换后的中文字符串
"""
try:
# 方法1:直接解码
result = byte_data.decode('gb2312')
return result
except UnicodeDecodeError:
try:
# 方法2:尝试GBK编码(兼容GB2312)
result = byte_data.decode('gbk')
return result
except UnicodeDecodeError as e:
raise ValueError(f"无法解码GB2312数据: {e}")
# 使用示例
if __name__ == "__main__":
# 示例1:直接解码
test_bytes = b'\xB1\xB1\xBE\xA9' # "北京"的GB2312编码
print(gb2312_to_chinese(test_bytes)) # 输出:北京
# 示例2:从文件读取GB2312编码内容
with open('gb2312_file.txt', 'rb') as f:
content = f.read()
print(gb2312_to_chinese(content))
# 示例3:处理网络请求中的GB2312数据
import requests
response = requests.get('http://example.com/gb2312_page')
# 假设响应内容是GB2312编码
chinese_content = response.content.decode('gb2312')
关键点:
- 确保你的数据确实是
bytes类型,如果是字符串需要先编码 - GB2312是GBK的子集,遇到解码失败时可以尝试用’gbk’
- 如果数据来源不确定,最好先检测编码格式
一句话建议: 用.decode('gb2312')直接转换,不行就换.decode('gbk')试试。
直接把%删了就好了,正什么则
谢谢,非常感谢。
我是这么做的:
Python2
print (urllib.unquote(’%BB%C6%B3%C9%CE%C4’)).decode(‘gbk’)

