Python中如何解码字符串识别法语字符(示例:'Pneus été'转'Pneus été')
解决BeautifulSoup解析本地HTML时的法语字符乱码问题
这是典型的文件编码读取错误导致的乱码问题,别担心,很快就能搞定!
问题根源
你看到的Pneus été其实是UTF-8编码的Pneus été被错误地用Latin-1(ISO-8859-1)解码后的结果。问题出在你用open()读取本地HTML文件时,没有指定正确的编码——Python默认使用系统编码读取文件,导致内容被错误解码,后续BeautifulSoup处理的自然就是乱码内容了。
解决方法
只需要在open()函数里明确指定文件编码为utf-8即可,这样BeautifulSoup就能拿到正确的文本内容,解析出来的tyre_season会自动显示正常的法语字符。
修改后的完整代码:
from bs4 import BeautifulSoup import os import math import requests import pandas as pd import helpers if __name__== '__main__': # 关键修改:打开文件时添加encoding='utf-8'参数 soup = BeautifulSoup(open(os.getcwd()+"/Desktop/Pneus auto _ Michelin FR.html", encoding='utf-8'), 'html.parser') tyre_category = soup.find_all('div', class_='tyre') for category in tyre_category: tyre_name = category.img['alt'] tyre_season = category.find('span', class_='season-icon')['title'] url_for_tyre_details = category.find('a', class_='tyre-detail')['href'] print(tyre_name, tyre_season, url_for_tyre_details, sep=",")
为什么之前的decode('utf-8')没用?
因为你尝试解码的字符串'Pneus été'已经是错误解码后的Unicode字符串了——在Python 3中,str类型本身没有decode()方法,就算强行处理也无法还原正确内容。正确的做法是在读取文件时就保证编码正确,而不是事后补救。
额外小技巧(不确定文件编码时用)
如果你不确定本地HTML文件的实际编码,可以用chardet库检测:
import chardet with open("你的HTML文件路径", 'rb') as f: detect_result = chardet.detect(f.read()) print(f"文件编码为:{detect_result['encoding']}")
把检测到的编码填入open()的encoding参数里,就能完美适配任何编码的文件。
内容的提问来源于stack exchange,提问作者AbdeAMNR
相关产品推荐
相关产品推荐

