2016-03-12 19 views
10

Ich kopierte und klebte diese zwei Saiten (eine aus einem Google Doc und eine aus dem Terminal) - was zum Teufel ist los? Und wie kann ich sie aufräumen, damit sie gleich sind?Golang Warum sind diese beiden Saiten nicht gleich?

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] 

die eindeutig zwei verschiedene Byte-Arrays für die gleiche Zeichenfolge sind.

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

+0

die erste Kopieren und es mehrfach dupliziert einfügen die erste und die zweite Zeichenfolge. Ich denke, es hat etwas mit der Codierung der Zeichenfolgen zu tun. Überprüfen Sie dies: https://play.golang.org/p/fSgO40Nz_- – Lansana

Antwort

13

Die zweite eine Anzahl von „weichen Bindestrich“ hat (U + 00AD) Zeichen zwischen den sichtbaren Zeichen, die erste zwischen „482“ und „e4“ erscheint. Ein weicher Bindestrich ist ein Zeichen, das unsichtbar ist, es sei denn, es befindet sich an der Stelle eines Zeilenumbrüchens, dann erscheint es als Bindestrich. Haben Sie den Code von einem Textverarbeitungsprogramm oder einem anderen Programm, das möglicherweise eine spezielle Textformatierung angewendet hat, kopiert?

+0

Ich habe tatsächlich kopieren und einfügen von Google Docs Vorschau-Modus. Danke, dass du mir geholfen hast, dieses Mystery zu entwirren – K2xL

+0

@ K2xL Ja, sei immer vorsichtig, wenn du Code von Apps kopierst, die nicht für den Umgang mit Code gedacht waren, sie können alle möglichen lustigen Dinge tun :) – hobbs

4

Das Problem ist, dass die zweite 4 Unicode Soft Bindestriche 0+00ad hat, die nicht auf dem Spielplatz bedruckbar sind.

Was Sie tun, ist eigentlich im Grunde ähnlich wie ...

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

Dies ist, was wie in vim geklebt aussieht, ist

This is a screenshot in vim

Verwandte Themen