Maison > Questions et réponses > le corps du texte
Comment comparer deux chaînes avec des encodages différents en javascript
const buf1 = Buffer.from('c2bf43c3b36d6f20657374c3a1733f', 'hex')
const buf2 = Buffer.from('fffebf004300f3006d006f002000650073007400e10073003f00', 'hex')
console.log(buf1.toString())
console.log(buf2.toString('utf16le'))
console.log(buf1.toString() === buf2.toString('utf16le'))
Sortie
¿Cómo estás?
¿Cómo estás?
false
Les encodages sont différents mais les caractères qu'ils représentent sont les mêmes.Comment comparer pour renvoyer vrai
.淡淡烟草味2017-07-05 10:45:04
Javascript ===
détermine si les chaînes sont identiques en fonction de la valeur du point de code Unicode
buf1.toString() diffère de buf2.toString('utf16le') car ce dernier contient des caractères de largeur nulle pour représenter l'endianité.
Il peut être utilisé pour déterminer si les caractères sont identiques sans prendre en compte ces espaces blancs localeCompare
'\u0000=-='.localeCompare('=-=\ufeff')
欧阳克2017-07-05 10:45:04
console.log(buf1.toString().localeCompare(buf2.toString('utf16le')) === 0)
滿天的星座2017-07-05 10:45:04
Je l'ai essayé localement et les longueurs de cordes sont différentes. Vous pouvez essayer la méthode suivante pour comparer en fonction de vos besoins
.const buf1 = Buffer.from('c2bf43c3b36d6f20657374c3a1733f', 'hex')
const buf2 = Buffer.from('fffebf004300f3006d006f002000650073007400e10073003f00', 'hex')
var b1=buf1.toString();
var b2=buf2.toString('utf16le');
console.log(b1.length)
console.log(b2.length)
console.log(b2.includes(b1));
//输出结果
// 12
// 13
// true