Я пришел по странному поведению javascript сегодня, что, вероятно, связано с проблемой кодирования символов. Функция длины возвращает два разных количества символов для того, что, по-видимому, является одной и той же строкой. В одном экземпляре строка была скопирована из значения базы данных, во втором случае я вручную написал символы с помощью моей клавиатуры. Я уверен, что это связано с UTF, но я не могу понять, как получить «правильный» счетчик символов. Есть ли способ узнать, какая кодировка ошибочной строки находится и как-то исправить? Есть ли способ заставить каждую строку в моем приложении быть UTF-8? Есть ли где-нибудь скрытый персонаж?javascript's String.length возвращает неверный счетчик символов
Спасибо за вашу помощь
var utils = {
/**
* cleans up our url before db insertion
*
* @param url
* @returns {String} the cleaned url
*/
cleanUrl : function(url){
url = url.trim().toLowerCase();
if(url.includes('?'))return url;
var lastChar = url.charAt(url.length-1);
console.log('lastchar = ' + lastChar);
if(lastChar == '/'){
url=url.substring(0, url.length-1);
}
return url;
},
doTest : function(){
var url = "https://bitcointalk.org/"; //this string was taken from DB
console.log('url length ' + url.length);
console.log('url length ' + url.trim().length);
var cleaned = this.cleanUrl(url);
console.log('cleaned length ' + cleaned.length);
console.log('cleaned ' + cleaned);
console.log('------------------------------');
var url2 = "https://bitcointalk.org/"; //this string was manually written
console.log('url2 length ' + url2.length);
console.log('url2 length ' + url2.trim().length);
var cleaned2 = this.cleanUrl(url2);
console.log('cleaned2 length ' + cleaned2.length);
console.log('cleaned2 ' + cleaned2);
}
};
utils.doTest()
А вот выход:
url length 25
url length 25
lastchar =
cleaned length 25
cleaned https://bitcointalk.org/
------------------------------
url2 length 24
url2 length 24
lastchar =/
cleaned2 length 23
cleaned2 https://bitcointalk.org
Ваш первый «очищенный» url не имеет '/' удален из него ... –
@CallumLinington нет, это не так, потому что в первом случае есть скрытый символ после/ – azpublic
Консоль Chrome показывает этот символ как красная точка, когда вы вставляете ее. –