2016-05-07 7 views
1

Ich versuche, dieses Programm auszuführen:Warum gibt Node crypto unterschiedliche Werte für dieselbe Zeichenfolge zurück?

var crypto = require('crypto'); 
var a = crypto.createHash('md5').update('89Zr-J591').digest('hex'); 
var name = '89Zr−J591'; 
var b = crypto.createHash('md5').update(name).digest('hex'); 

console.log(a); //c6281bc77bea86a92df59225357b6b54 
console.log(b); //a3853813486b53eca6bf7d2428876161 
console.log(a === b); //false 

erwarte ich, dass beide a und btrue zu sein ... gleich zu sein.

Warum ist das nicht der Fall? Warum sind sie anders?

Antwort

3

Sie nicht die gleiche Zeichenfolge sind, finden Sie in den Bindestrich:

'89Zr-J591' 
// ^this is U+002D 
'89Zr−J591' 
// ^this is U+2212 
% charinfo −- 
U+2212 MINUS SIGN [Sm] 
U+002D HYPHEN-MINUS [Pd] 

Im ersten Beispiel U+002D verwendet wird. Was bekommst du, wenn du minus auf deiner Tastatur drückst.

Im zweiten Beispiel wird U+2212 verwendet.

+0

Danke. Ich habe das nicht bemerkt, denn wenn ich beide in meiner Oracle-Datenbank abgefragt habe, würden sie die gleiche Zeile zurückgeben, obwohl sie unterschiedliche Hyphen sind. Ich frage mich, wie Oracle Bindestriche handhabt ... Ich denke, dass es sie irgendwie zusammenfügt? – kidcapital

+1

@kidcapital Wenn so etwas passiert. Ein Hexdump und Diff ist eine Methode für mich gehen :-) – andlrc

+0

gute Idee;) @andric – kidcapital