Python中字符串部分数字变成奇怪的编码符号如何解决?

在学 scrapy 爬取数据的时候,出现了这种奇怪的东西是怎么回事

大部分都是正常的,大概 1/10 出现问题

本该是数字的,变成这种奇怪的符号

...

蓝鼎铂金园 简单装修 南北通透 3 室 2 厅 1 卫 120 1300

供电局小区 麣室龤厅龤卫 麣室龤厅龤卫 齤龒 閏鸺龒

府苑小区 3 室 2 厅 1 卫 3 室 2 厅 1 卫 92.16 1200

天龙小区 龤室龤厅龤卫 主卧(龤室) 鑶龥 鑶龥龥

...

求怎么处理恢复正常 ?


Python中字符串部分数字变成奇怪的编码符号如何解决?

4 回复

这是网站加密的吧.
有这种加密方式的. 防爬得.

58 同城和猫眼都用的这种


这个问题通常是因为字符串编码问题导致的,特别是当字符串中包含非ASCII字符时。最常见的情况是:

  1. 编码不一致:读取文件或接收数据时使用了错误的编码方式
  2. 特殊字符处理不当:包含中文、表情符号等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)

统一编码处理就能解决乱码问题。

那么, 有什么办法解决吗?

最近也遇到了

回到顶部