Python中字符串部分数字变成奇怪的编码符号如何解决?
在学 scrapy 爬取数据的时候,出现了这种奇怪的东西是怎么回事
大部分都是正常的,大概 1/10 出现问题
本该是数字的,变成这种奇怪的符号
...
蓝鼎铂金园 简单装修 南北通透 3 室 2 厅 1 卫 120 1300
供电局小区 麣室龤厅龤卫 麣室龤厅龤卫 齤龒 閏鸺龒
府苑小区 3 室 2 厅 1 卫 3 室 2 厅 1 卫 92.16 1200
天龙小区 龤室龤厅龤卫 主卧(龤室) 鑶龥 鑶龥龥
...
求怎么处理恢复正常 ?
Python中字符串部分数字变成奇怪的编码符号如何解决?
4 回复
这是网站加密的吧.
有这种加密方式的. 防爬得.
58 同城和猫眼都用的这种
这个问题通常是因为字符串编码问题导致的,特别是当字符串中包含非ASCII字符时。最常见的情况是:
- 编码不一致:读取文件或接收数据时使用了错误的编码方式
- 特殊字符处理不当:包含中文、表情符号等Unicode字符
解决方案:
# 情况1:读取文件时指定正确的编码
with open('your_file.txt', 'r', encoding='utf-8') as f:
content = f.read()
# 情况2:处理已损坏的字符串(尝试不同编码)
def fix_encoding(text):
encodings = ['utf-8', 'gbk', 'gb2312', 'latin-1', 'cp1252']
for enc in encodings:
try:
# 如果字符串已经是str类型,先编码再解码
if isinstance(text, str):
fixed = text.encode('latin-1').decode(enc)
else:
fixed = text.decode(enc)
return fixed
except (UnicodeDecodeError, UnicodeEncodeError):
continue
return text # 如果所有编码都失败,返回原文本
# 使用示例
problem_text = "你好123世界" # 假设这是显示异常的字符串
fixed_text = fix_encoding(problem_text)
print(fixed_text)
# 情况3:确保写入文件时使用正确编码
data = "包含中文和数字123的字符串"
with open('output.txt', 'w', encoding='utf-8') as f:
f.write(data)
关键点:
- 统一使用UTF-8编码是最佳实践
- 在文件操作、网络请求、数据库交互中明确指定编码
- 使用
chardet库可以自动检测编码:pip install chardet
import chardet
def detect_encoding(text_bytes):
result = chardet.detect(text_bytes)
return result['encoding']
# 使用
with open('file.txt', 'rb') as f:
raw_data = f.read()
encoding = detect_encoding(raw_data)
text = raw_data.decode(encoding)
统一编码处理就能解决乱码问题。
那么, 有什么办法解决吗?
最近也遇到了

