惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Hacker News - Newest:
Hacker News - Newest: "LLM"
S
Security Affairs
PCI Perspectives
PCI Perspectives
Google Online Security Blog
Google Online Security Blog
W
WeLiveSecurity
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Recent Commits to openclaw:main
Recent Commits to openclaw:main
P
Privacy & Cybersecurity Law Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
S
Security @ Cisco Blogs
Security Archives - TechRepublic
Security Archives - TechRepublic
Cyberwarzone
Cyberwarzone
L
Lohrmann on Cybersecurity
TaoSecurity Blog
TaoSecurity Blog
V
Visual Studio Blog
博客园 - 聂微东
Scott Helme
Scott Helme
博客园 - 【当耐特】
K
Kaspersky official blog
Security Latest
Security Latest
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
MyScale Blog
MyScale Blog
Schneier on Security
Schneier on Security
WordPress大学
WordPress大学
博客园 - 叶小钗
C
Check Point Blog
V2EX - 技术
V2EX - 技术
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - Franky
T
Tor Project blog
Apple Machine Learning Research
Apple Machine Learning Research
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
腾讯CDC
雷峰网
雷峰网
博客园_首页
美团技术团队
Y
Y Combinator Blog
C
CERT Recently Published Vulnerability Notes
AWS News Blog
AWS News Blog
月光博客
月光博客
N
Netflix TechBlog - Medium
Last Week in AI
Last Week in AI
Recent Announcements
Recent Announcements
Google DeepMind News
Google DeepMind News
Help Net Security
Help Net Security
P
Proofpoint News Feed
MongoDB | Blog
MongoDB | Blog
C
Cybersecurity and Infrastructure Security Agency CISA

博客园 - papering

Canvas 指纹 魔改chromium源码——CDP(Chrome DevTools Protocol)检测01 whether the browser environment is controlled by a robot. chromium指纹魔改 对拷线 rpa 任务编排 a JSON formatted stream to ``fp`` 浏览器背后的黑科技 多进程 多线程 callback technique: signals and slots chrome 浏览器 调试 数据采集 Chrome DevTools ProtocolCDP PyInstaller 实现延迟导入 Storage mount options 汽车 OTA 技术体系 使用 grep 的扩展正则表达式功能 Python 中双下划线会触发名称修饰(mangling),通常用于避免子类覆盖, 容器内没有安装curl 验证web服务存在 在容器内执命令 连接数据库 http响应的 headers中拿到文件名 复制python项目文件,包含 包依赖 物理机 虚拟机 云厂商 裸金属服务器 CPU 透传 CPU Passthrough Docker 环境权限与资源限制 can't start new thread Seccomp security profiles Don't let containers reboot the host. Registry Pattern search_after 深度分页 Scrolling is not intended for real time user requests no longer recommend using the scroll API for deep pagination point in time PIT preserve the current index state kafka 大消 小消 依赖于中央数据库来协调网络中的查询 使用泛滥式查询(query flooding)来查询文件,搜索网络中的所有节点 使用分布式散列表来查询网络中的文件 使用 DHT (Distributed Hash Table,分布式哈希表) 替代 Tracker,标志着 P2P 系统从“有中心”进化到了“完全去中心化”。 STUN 负责“问路”(发现 IP),Tracker 负责“找人”(发现节点),而打洞失败时则靠 TURN “代跑”(转发数据) p2p 视频传输方案 UDP 打洞 attached detached shared memory 共享内存 shm ipcs folders of instructions, scripts, and resources that Claude loads dynamically to improve performance on specialized tasks complete specific tasks in a repeatable way 词元 指令 分词器 向量化 计算关系 输出回答 QQ 25 年进化史:从UDP到NT架构,支撑亿级在线的技术之路 如何设计一个IM单聊架构 长链接业务层 短链接业务层 go java python dart 内存模型区别 go java python 面向对象区别 常规价将被永久拉低,难以重建价格锚点 AI对比功能强调的是产品的真实价值 LLM provider configuration luckclaw AI 智能体 Gateway 网关 技术架构的每一次重大更新,都被称作一次“脱壳” 具备“手脚”去在真实操作系统中“执行”任务的数字实体 供应链攻击从“欺骗人类”向“操纵AI逻辑”的演进 字符串相等 地址比较 内容比较 ‌ 零宽不连字, 不可见字符 ch.isprintable() purge会移除配置文件,而remove仅删除程序文件。 c# 异步 同步 请求 生成式引擎优化 Generative Engine Optimization GEO 内容优化策略 python lua 传值 传址 用AI原生的思维重新构建产品
“幽灵字符”问题
papering · 2026-06-27 · via 博客园 - papering

 某个位置的字符被替换成了视觉上相同、但底层编码不同的字符

全角(Full-width):每个字符占用两个标准字符位置,常用于中文标点、汉字以及部分英文字符和符号。全角字符在视觉上更宽,适合中文排版,保证文字对齐整齐。
半角(Half-width):每个字符占用一个标准字符位置,主要用于英文字符、数字和西文标点。半角字符在程序代码、英文文档或不支持中文的系统中使用较多。
既然长度相等且肉眼看起来一样,说明不是多了一个隐藏字符(否则长度会不同),而是某个位置的字符被替换成了视觉上相同、但底层编码不同的字符。
以下是导致这种现象最常见的 4 个原因及排查方法:
1. 全角与半角字符混淆(最常见)
肉眼看起来都是空格或字母,但一个是半角(ASCII),一个是全角(中文输入法下打出的)。
半角空格: ' ' (Unicode: U+0020)
全角空格: ' ' (Unicode: U+3000)
全角字母: A (Unicode: U+FF21) vs 半角 A (Unicode: U+0041)
2. 零宽字符(Zero-width characters)
这些字符在屏幕上不占宽度、不可见,但它们是真实的字符,会占用字符串长度。
零宽空格 (U+200B)
零宽非连接符 (U+200C)
零宽连接符 (U+200D)
场景:从网页、PDF、微信复制文本时,经常会自动插入这些字符用于排版或防复制。
3. Unicode 规范化问题(NFC vs NFD)
这在处理带声调的字母(如法语、西班牙语)或Emoji时极易发生。同一个视觉符号,底层有两种存储方式:
组合形式 (NFC): é 作为一个单独的字符 (U+00E9)
分解形式 (NFD): e (U+0065) + ́ (组合重音符号 U+0301)
结果:肉眼看都是 é,长度也都是 1(或对应比例),但 == 比较为 False。macOS 的文件系统默认使用 NFD,而 Linux/Windows 多用 NFC,跨平台传数据时极易踩坑。
4. 相似字形字符(Homoglyphs)
不同语言或不同区块中,长得一模一样的字符:
西里尔字母 а (U+0430) vs 拉丁字母 a (U+0061)
数字 0 (U+FF10) vs 数字 0 (U+0030)

零宽空格

Unicode名称说明
U+200B 零宽空格 (ZWSP) 最常见的零宽字符,用于指示可换行点,从网页/PDF复制文本时极易混入
U+200C 零宽非连接符 (ZWNJ) 阻止相邻字符连写,常见于阿拉伯语、波斯语排版
U+200D 零宽连接符 (ZWJ) 强制相邻字符连写,Emoji 组合(如 👨‍👩‍👧‍👦)就是靠它实现的
U+2060 单词连接符 (Word Joiner) 类似零宽空格,但禁止在该位置换行
U+FEFF 零宽无断空格 / BOM 标记 文件开头标识编码格式(UTF-8 BOM = EF BB BF),也可能出现在字符串首尾

文本方向控制

Unicode名称说明
U+200E 左至右标记 (LRM) 强制后续文本从左到右排列
U+200F 右至左标记 (RLM) 强制后续文本从右到左排列
U+202A 左至右嵌入 (LRE) 嵌套的从左到右方向控制
U+202B 右至左嵌入 (RLE) 嵌套的从右到左方向控制
U+202C 弹出方向格式 (PDF) 结束上述方向嵌套
U+202D 左至右覆盖 (LRO) 强制从左到右覆盖方向
U+202E 右至左覆盖 (RLO) 强制从右到左覆盖方向(常被用于文件名伪装攻击)

其他

Unicode名称说明
U+00AD 软连字符 (Soft Hyphen) 仅在断行时显示为连字符,平时不可见
U+034F 组合图形连接符 (CGJ) 不可见,用于影响组合字符的处理
U+061C 阿拉伯字母标记 (ALM) 影响阿拉伯语排版方向
U+180E 蒙古文元音分隔符 在蒙古文中不可见,但影响排版

清楚零宽字符

import re

def remove_zero_width(text):
    """移除所有零宽字符和不可见控制字符"""
    return re.sub(r'[\u200B-\u200F\u202A-\u202E\u2060\uFEFF\u00AD\u034F\u061C\u180E]', '', text)

# 使用示例
str1 = "hello"      # 看起来是 hello
str2 = "hello"      # 真正的 hello
print(str1 == str2)  # False!
print(remove_zero_width(str1) == str2)  # True