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

html.parser.unescape返回特殊编码字符串导致split('-')分割失败问题

问题根因

该问题的核心根因为特殊Unicode字符和普通ASCII字符的视觉混淆,解码后的内容里两个关键字符和常规认知的ASCII字符并不一致:

  •   解码后是不换行空格 \xa0(Unicode U+00A0),区别于普通ASCII空格(U+0020)
  • – 解码后是短破折号 –(Unicode U+2013),区别于普通ASCII连字符/减号 -(U+002D)
    调用split('-')时传入的是普通ASCII连字符,无法匹配解码后的短破折号,因此无法完成分割操作。

解决方案

方案1:直接匹配对应字符分割

如果确认源内容里的分隔符固定是–解码后的U+2013短破折号,直接用该字符作为分割参数即可:

import html.parser

raw_str = '10:20am – 12:10pm'
decoded_str = html.parser.unescape(raw_str)

# 直接用U+2013短破折号分割,写为split('\u2013')效果完全一致
res = decoded_str.split('–')
# 去除结果前后的不换行空格
res = [item.strip() for item in res]
print(res)
# 输出:['10:20am', '12:10pm']

方案2:统一归一化特殊字符再处理

如果后续还要做更多字符串操作,建议先把所有特殊Unicode字符替换为对应的ASCII等价字符,避免后续再出现同类问题:

import html.parser

raw_str = '10:20am – 12:10pm'
decoded_str = html.parser.unescape(raw_str)

# 字符归一化处理
normalized_str = decoded_str.replace('\u2013', '-')  # 短破折号替换为普通连字符
normalized_str = normalized_str.replace('\xa0', ' ')  # 不换行空格替换为普通空格

# 此时即可用普通连字符正常分割
res = normalized_str.split('-')
print(res)
# 输出:['10:20am ', ' 12:10pm']

方案3:正则匹配所有类破折号字符分割

如果源内容可能出现多种破折号(长破折号U+2014、半角破折号、连字符等),可以用正则匹配所有类破折号的字符做分割,兼容性更强:

import html.parser
import re

raw_str = '10:20am – 12:10pm'
decoded_str = html.parser.unescape(raw_str)

# 匹配所有常见破折号、连字符完成分割
res = re.split(r'[\u2010-\u2015-]', decoded_str)
res = [item.strip() for item in res]
print(res)
# 输出:['10:20am', '12:10pm']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:00:04