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

时间:2016-03-12 03:34:15

标签: go

我复制并粘贴了这两个字符串(一个来自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

2 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:4)

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

你实际做的事情基本上与......相似。

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

这就是粘贴到vim中的内容

This is a screenshot in vim