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

Python读取含\u202f的tsv文件打印时字符消失是什么原因

问题现象

读取含Unicode特殊字符\u202f(窄不间断空格)的tsv文件时,不同打印方式出现展示差异:

  • 测试代码:
ff = "test.tsv"

lines1 = open(ff, encoding='utf-8').readlines()
str1 = open(ff, encoding='utf-8').read()

print("lines1:", lines1)
print("lines1[0]:", lines1[0])
print("str1:", str1)
  • 对应运行输出:
lines1: ['assume Fourbooks\u202f è una piattaforma\n']
lines1[0]: assume Fourbooks  è una piattaforma

str1: assume Fourbooks  è una piattaforma

直接打印readlines()返回的列表时能看到\u202f转义符,但打印列表内单个元素、read()返回的完整字符串时,该字符看起来像消失了。

产生原因

这个差异和Python打印不同类型对象的底层逻辑有关,\u202f字符从始至终都存在于读取到的内容里,根本没有消失:

  • 打印列表等容器对象时,Python会调用容器的__repr__()方法生成输出,该方法会对容器内的所有字符串元素统一调用repr()做转义处理:特殊空白、不可见的Unicode字符会被展示为\uXXXX格式的转义序列,因此你能在列表输出中直接看到\u202f的转义写法。
  • 打印单个字符串对象时,Python调用的是字符串的__str__()方法,该方法会直接渲染字符串内的所有Unicode字符,不会做转义处理。\u202f本身是宽度极窄的不间断空白字符,视觉上和普通空格高度相似,肉眼很难直接分辨,因此会产生“字符消失”的错觉。
验证方法

可以通过如下代码确认字符始终存在于字符串中:

# 判断字符是否存在
print('\u202f' in lines1[0])  # 会返回布尔值True
# 对单个字符串调用repr,即可看到和列表输出一致的转义效果
print(repr(lines1[0]))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:09:28