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

为何Python中'\xfc\xa9\xf1\xd2Mb\x80?'与'眉漏帽脪Mb\x80?'相等为True?

为什么这两个视觉不同的Unicode字符串会判定相等?

哈哈,这个问题其实是终端编码不匹配造成的视觉错觉,本质上这两个字符串的Unicode码点完全一致!我来给你一步步拆解:

  • 首先,你看到的“眉漏帽脪”并不是真正的中文Unicode字符,而是终端把那些转义对应的Unicode码点,用错误的编码(比如GBK)解码显示出来的结果。
  • 你可以用下面的代码验证两个字符串的底层码点完全相同:
    s1 = '\xfc\xa9\xf1\xd2Mb\x80?'
    s2 = '眉漏帽脪Mb\x80?'
    print([ord(c) for c in s1])
    print([ord(c) for c in s2])
    
    运行后你会发现,两个列表的输出都是 [252, 169, 241, 210, 77, 98, 128, 63]——这就实锤了它们是同一个Unicode序列。

出现这种视觉差异的核心原因:

  • 你的终端默认用中文编码(比如GBK)来显示内容,但Python输出的是Unicode字符串的UTF-8字节,终端把这些字节当成GBK编码解码,就把原本的拉丁字符(比如ü、©、ñ、Ò)转换成了看起来像中文的汉字。
  • 举个具体例子:U+00FC(ü)的UTF-8字节是0xC3 0xBC,这个字节组合在GBK编码里正好对应“眉”的编码;同理,其他几个字符的UTF-8字节组合也被终端错误解码成了对应的中文汉字,才造成了“两个不同字符串”的假象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:11:04