【问题标题】:Golang Why aren't these two strings equal?Golang 为什么这两个字符串不相等?
【发布时间】:2016-03-12 03:34:14
【问题描述】:

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

【问题讨论】:

  • 复制第一个并多次粘贴会复制第一个字符串,与第二个字符串相同。我认为这与字符串的编码有关。检查一下:play.golang.org/p/fSgO40Nz_-

标签: go


【解决方案1】:

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

【讨论】:

  • 我确实从谷歌文档预览模式复制和粘贴。谢谢你帮我解开这个谜
  • @K2xL 是的,从不用于处理代码的应用程序中复制代码时请务必小心,它们可以对它做各种有趣的事情 :)
【解决方案2】:

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

你实际做的和...基本类似

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

这是粘贴到 vim 中的样子

【讨论】:

    猜你喜欢
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多