为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 为什么这两个字符串不相等?

Golang 为什么这两个字符串不相等?

Go
汪汪一只猫 2021-12-20 16:52:10
我复制并粘贴了这两个字符串(一个来自 Google Doc,一个来自终端)——到底发生了什么?我该如何清理它们以使它们相同?package mainimport "fmt"func main() {    fmt.Println([]byte("f6f77482e4394a21815b7090bc0185b4"))    fmt.Println([]byte("f6f77482­e439­4a21­815b­7090bc0185b4"))}返回:[102 54 102 55 55 52 56 50 101 52 51 57 52 97 50 49 56 49 53 98 55 48 57 48 98 99 48 49 56 53 98 52][102 54 102 55 55 52 56 50 194 173 101 52 51 57 194 173 52 97 50 49 194 173 56 49 53 98 194 173 55 48 57 48 98 99 48 49 56 53 98 52]对于同一个字符串,这显然是两个不同的字节数组。https://play.golang.org/p/_zd7tjqCZl
查看完整描述

2 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

第二个在可见字符之间有许多“软连字符”(U+00AD)字符,第一个出现在“482”和“e4”之间。软连字符是不可见的字符,除非它碰巧位于换行符的位置,然后它显示为连字符。您是否从文字处理器或其他可能对其应用了特殊文本格式的程序中复制粘贴了代码?


查看完整回答
反对 回复 2021-12-20
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

问题是第二个有 4 个 Unicode 软连字符0+00ad,它们不能在操场上打印。


你实际上在做什么基本上类似于......


fmt.Println([]byte("f6f77482e4394a21815b7090bc0185b4"))

fmt.Println([]byte("f6f77482­-e439­-4a21-­815b­-7090bc0185b4"))

这是粘贴到 vim 中的样子

//img1.sycdn.imooc.com//61c0445b0001b3e604760144.jpg

查看完整回答
反对 回复 2021-12-20
  • 2 回答
  • 0 关注
  • 312 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信