2016-03-12 11 views
10

Ho copiato e incollato queste due stringhe (una da un documento Google e una dal terminale): che diavolo sta succedendo? E come posso pulirli in modo che siano uguali?Golang Perché queste due stringhe non sono uguali?

package main 

import "fmt" 

func main() { 
    fmt.Println([]byte("f6f77482e4394a21815b7090bc0185b4")) 
    fmt.Println([]byte("f6f77482­e439­4a21­815b­7090bc0185b4")) 
} 

Returns:

[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] 

che sono chiaramente due diverse matrici di byte per la stessa stringa.

https://play.golang.org/p/_zd7tjqCZl

+0

Copia la prima e incollandolo volte più duplicati la prima stringa, e lo stesso con la seconda stringa. Penso che abbia qualcosa a che fare con la codifica delle stringhe .. controlla questo: https://play.golang.org/p/fSgO40Nz_- – Lansana

risposta

13

La seconda ha un certo numero di "soft hyphen" (U + 00AD) caratteri tra i caratteri visibili, il primo che appare tra "482" e "e4". Un trattino morbido è un personaggio invisibile a meno che non si trovi nella posizione di un'interruzione di riga, quindi viene visualizzato come trattino. Hai copiato e incollato il codice da un elaboratore di testi o da qualche altro programma che potrebbe aver applicato una speciale formattazione del testo?

+0

ho fatto copia e incolla effettivamente dalla modalità di anteprima di Google Documenti. grazie per avermi aiutato a sbrogliare questo mistero – K2xL

+0

@ K2xL sì, fai sempre attenzione quando copi il codice da app che non erano pensate per gestire il codice, possono fare ogni genere di cose divertenti :) – hobbs

4

Il problema è che il secondo ha 4 Unicode Soft Hyphens 0+00ad che non sono stampabili nel parco giochi.

cosa si sta effettivamente facendo è fondamentalmente simile a ...

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

Questo è ciò che è appare come incollato in vim

This is a screenshot in vim

Problemi correlati