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

我复制并粘贴了这两个字符串(一个来自 Google Doc,一个来自终端)——到底发生了什么?我该如何清理它们以使它们相同?


package main


import "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


汪汪一只猫
浏览 313回答 2
2回答

慕侠2389804

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

拉风的咖菲猫

问题是第二个有 4 个 Unicode 软连字符0+00ad,它们不能在操场上打印。你实际上在做什么基本上类似于......fmt.Println([]byte("f6f77482e4394a21815b7090bc0185b4"))fmt.Println([]byte("f6f77482­-e439­-4a21-­815b­-7090bc0185b4"))这是粘贴到 vim 中的样子
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go