You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将字节串还原为原始字符串?解决北欧字符解码异常问题

解决BeautifulSoup标签bytes转字符串后的还原问题

你的问题出在把bytes对象直接转成字符串(str(b))时,得到的是Python对bytes的repr表示(比如b'xxx'格式),直接用unicode_escape解码会错误解析UTF-8字节序列。下面是可靠的还原方案:

核心思路

要还原出原始的article标签,需要先把这个repr字符串转回真实的bytes对象,再解码成UTF-8文本,最后可以重新用BeautifulSoup解析成标签。

完整代码实现

import ast
from bs4 import BeautifulSoup

# 你的输入字符串
input_str = 'b\'<article> \n L\xc3\xa4s bl.a. om Gasporox nya m\xc3\xa4tkoncept f\xc3\xb6r tr\xc3\xa5g, en intervju med styrelseledamoten Per Nystr\xc3\xb6m och nyheter fr\xc3\xa5n GPX Medical om bland annat projekten Sinuslight och Neo-Lung.\n</article>\''

# 1. 将repr字符串还原为bytes对象(最可靠的方式)
article_bytes = ast.literal_eval(input_str)

# 2. 用UTF-8解码bytes,得到原始HTML文本
article_html = article_bytes.decode('utf-8')

# 3. 重新解析为BeautifulSoup的article标签(如果需要操作标签的话)
soup = BeautifulSoup(article_html, 'html.parser')
article = soup.find('article')

# 输出结果
print(article.get_text(strip=True))
# 或者打印完整标签结构
print(article.prettify())

为什么之前的方法失效?

你用codecs.getdecoder("unicode_escape")处理时,会把\xc3\xa4这类UTF-8字节当成Unicode转义序列解码,结果得到ä(错误的字符)。而实际上这些是ä的UTF-8编码字节,必须先还原成bytes对象,再用UTF-8解码才能得到正确的北欧字符。

额外说明

ast.literal_eval是处理这类问题的最佳选择,它能安全解析Python的字面量(比如b'xxx'、'xxx'等),避免手动剥离字符串首尾的b'和'可能带来的边界问题(比如字符串内部包含转义的单引号)。

内容的提问来源于stack exchange,提问作者antonstenaxel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:02:46