Строки JavaScript изначально являются Unicode. Они содержат последовательности символов *, а не байтовые последовательности, поэтому невозможно содержать недопустимую байтовую последовательность.
(Технически, на самом деле они содержат последовательности кодовых единиц UTF-16, что не совсем то же самое, но, вероятно, сейчас вам не о чем беспокоиться.)
Вы можете, если вам нужно по какой-то причине, создать строку, содержащую символы, используемые в качестве заполнителей для байтов. то есть. используя символ U+0080
('\ x80') для обозначения байта 0x80. Это то, что вы получили бы, если бы вы кодировали символы в байты с использованием UTF-8, а затем по ошибке декодировали их обратно в символы с использованием ISO-8859-1. Для этого есть специальная идиома JavaScript:
var bytelike= unescape(encodeURIComponent(characters));
и для возврата от псевдобайтов UTF-8 к символам:
var characters= decodeURIComponent(escape(bytelike));
(Примечательно, что это единственный случай использования escape
/ unescape
функций. Их существование в любой другой программе почти всегда является ошибкой.)
decodeURIComponent(escape(bytes))
, поскольку он ведет себя как декодер UTF-8, возникнет ошибка, если последовательность введенных в него блоков кода не будет принята как байты UTF-8.
Очень редко вам нужно работать с такими байтовыми строками в JavaScript. Лучше продолжать работать в Unicode на стороне клиента. Браузер позаботится о UTF-8-кодировании строки на проводе (при отправке формы или XMLHttpRequest).