You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python中向字符串添加零宽字符的显示与拆分问题

解决零宽字符在Python中用于字符串拆分的问题

嘿,我之前也碰到过类似的麻烦,来给你捋清楚怎么搞定!

首先你看到的Test?Test不是字符串本身出问题了——这是因为你的终端或者编辑器不支持显示零宽空格(Unicode码点U+200B)这个非打印字符,所以用问号?替代了无法渲染的内容,实际上字符串里的零宽空格是真实存在的。

正确的使用姿势:用Unicode转义序列

直接在Python代码里用\u200B表示零宽空格,就能避免输入时的编码混乱,还能保证跨环境的一致性。举个实际例子:

# 构造带零宽空格的字符串
target_str = "Cat\u200BDog\u200B Bird"  # 注意这里故意留了个普通空格对比
print(target_str)  # 视觉上显示为CatDog Bird,零宽空格完全不可见
# 按零宽空格拆分
split_result = target_str.split("\u200B")
print(split_result)  # 输出: ['Cat', 'Dog', ' Bird']

关于encode("utf-8")后出现奇怪字符的原因

零宽空格的UTF-8编码字节序列是\xe2\x80\x8b,当你对字符串执行encode("utf-8")后,字节串里就会显示这个序列,看起来像“奇怪字符”,但这是完全正常的——它本来就是非打印的控制字符。只要解码回UTF-8,就能恢复原字符串并正常拆分:

original_str = "Test\u200BTest"
encoded_bytes = original_str.encode("utf-8")
print(encoded_bytes)  # 输出: b'Test\xe2\x80\x8bTest'
# 解码回字符串
decoded_str = encoded_bytes.decode("utf-8")
print(decoded_str.split("\u200B"))  # 输出: ['Test', 'Test']

可选的其他零宽字符

如果需要,你也可以用其他零宽字符实现同样效果,比如:

  • 零宽非断空格(U+FEFF
  • 零宽连字符(U+200C
    它们的使用逻辑和零宽空格完全一致,同样能被split()识别拆分,视觉上也不会显示任何空格。

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

火山引擎 最新活动