Есть ли способ реплицировать mb_detect_encoding с PHP с помощью javascript? Я пытаюсь воссоздать что-то подобное.
isAscii("éton") //false
isAscii("hello") //true
Или есть способ проверить, была ли строка уже закодирована с помощью utf-8?
Мой бэкэнд возвращает мне представление HTML в кодировке base64, чтобы аудитор XSS не заблокировал мой запрос, затем я декодирую представление и вставляю его в конкретный <div>, но кодировка все испорчена
Это означает, что вы делаете что-то неправильно при кодировании или декодировании.
Да, для многих целей и целей «Строки - это просто символы». Когда вам нужно их подсчитать или нарезать, они на самом деле являются кодовыми единицами UTF-16. Этот вопрос не имеет смысла. HTTP-ответ должен иметь кодировку, которая, вероятно, обрабатывается вашей функцией xhr, если вы заканчиваете с телом ответа в строке. Если строка содержит Base64, то декодирование дает вам массив байтов. Если байтовый массив является документом HTML, тогда он будет иметь кодировку документа, которая либо объявлена внутри, либо передана / согласована с лицом, которое преобразовало его в Base64.
Да, с моим запросом возникла проблема, я исправил ее после того, как @SLacks оставил свой комментарий, и действительно, я не знал, что не так, поэтому вопрос не имеет смысла.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Поскольку все символы ASCII находятся между \x00 и \x7F, вы можете просто проверить, соответствует ли ваша строка этому диапазону символов с помощью RegEx.
RegEx будет /^[\x00-\x7F]*$/, и использование метода //.test() возвращает, соответствует ли вход шаблону:
function isAscii(str) {
return /^[\x00-\x7F]*$/.test(str);
}
console.info(isAscii("éton")) //false
console.info(isAscii("hello")) //trueкак указывает @duskwuff, было бы более производительно проверить, содержит ли строка какие-либо символы не из набора ASCII, а затем вернуть результат, противоположный этому результату:
function isAscii(str) {
return !/[^\x00-\x7f]/.test(str);
}
console.info(isAscii("éton")) //false
console.info(isAscii("hello")) //trueОднако обратите внимание, что это не кодировка, это набор символов.
Более производительным вариантом было бы отменить условие: найти любой символ, не являющийся ASCII ([^\x00-\x7f]), и инвертировать результат Regex.test.
Это потрясающе! Работает хорошо! Спасибо! Одобряю твой ответ!
UTF8 кодирует строки в байты. Строки - это просто символы; у них нет кодировки. Какую проблему ты пытаешься решить?