Проверка кодировки Javascript ASCII / UFT8

Есть ли способ реплицировать mb_detect_encoding с PHP с помощью javascript? Я пытаюсь воссоздать что-то подобное.

 isAscii("éton") //false
 isAscii("hello") //true

Или есть способ проверить, была ли строка уже закодирована с помощью utf-8?

UTF8 кодирует строки в байты. Строки - это просто символы; у них нет кодировки. Какую проблему ты пытаешься решить?

SLaks 20.07.2018 18:48

Мой бэкэнд возвращает мне представление HTML в кодировке base64, чтобы аудитор XSS не заблокировал мой запрос, затем я декодирую представление и вставляю его в конкретный <div>, но кодировка все испорчена

MathieuAuclair 20.07.2018 18:52

Это означает, что вы делаете что-то неправильно при кодировании или декодировании.

SLaks 20.07.2018 19:01

Да, для многих целей и целей «Строки - это просто символы». Когда вам нужно их подсчитать или нарезать, они на самом деле являются кодовыми единицами UTF-16. Этот вопрос не имеет смысла. HTTP-ответ должен иметь кодировку, которая, вероятно, обрабатывается вашей функцией xhr, если вы заканчиваете с телом ответа в строке. Если строка содержит Base64, то декодирование дает вам массив байтов. Если байтовый массив является документом HTML, тогда он будет иметь кодировку документа, которая либо объявлена ​​внутри, либо передана / согласована с лицом, которое преобразовало его в Base64.

Tom Blodget 20.07.2018 22:52

Да, с моим запросом возникла проблема, я исправил ее после того, как @SLacks оставил свой комментарий, и действительно, я не знал, что не так, поэтому вопрос не имеет смысла.

MathieuAuclair 20.07.2018 23:06
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
5
334
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку все символы 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.

user149341 20.07.2018 18:54

Это потрясающе! Работает хорошо! Спасибо! Одобряю твой ответ!

MathieuAuclair 20.07.2018 18:55

Да, «это не кодировка, это набор символов». JavaScript использует Unicode. Эта функция проверяет подмножество: isBlockC0ControlsAndBasicLatin.

Tom Blodget 20.07.2018 22:57

Другие вопросы по теме