Как конвертировать смешанные ASCII и Unicode в строку в JavaScript? - PullRequest
1 голос
/ 19 июня 2011

У меня есть смешанный источник символов Unicode и ASCII, например:

var source = "\u5c07\u63a2\u8a0e HTML5 \u53ca\u5176\u4ed6";

Как мне преобразовать его в строку, используя и расширяя приведенную ниже функцию uniCodeToString, написанную мной в Javascript?Эта функция может конвертировать чистый Unicode в строку.

function uniCodeToString(source){
    //for example, source = "\u5c07\u63a2\u8a0e"
    var escapedSource = escape(source);
    var codeArray = escapedSource.split("%u");
    var str = "";
    for(var i=1; i<codeArray.length; i++){
        str += String.fromCharCode("0x"+codeArray[i]);
    }
    return str;
}

Ответы [ 2 ]

4 голосов
/ 19 июня 2011

Использовать encodeURIComponent, escape никогда не предназначалось для юникода.

   var source = "\u5c07\u63a2\u8a0e HTML5 \u53ca\u5176\u4ed6";


    var enc=encodeURIComponent(source)

   //returned value: (String)
    %E5%B0%87%E6%8E%A2%E8%A8%8E%20HTML5%20%E5%8F%8A%E5%85%B6%E4%BB%96

    decodeURIComponent(enc)

    //returned value: (String)
    將探討 HTML5 及其他
2 голосов
/ 19 июня 2011

Я думаю, что вы неправильно понимаете назначение escape-последовательностей Unicode.

var source = "\u5c07\u63a2\u8a0e HTML5 \u53ca\u5176\u4ed6";

Строки JavaScript всегда являются Unicode (каждая единица кода представляет собой 16-битное значение в кодировке UTF-16.)чтобы позволить вам описывать значения, которые не поддерживаются кодировкой, используемой для сохранения исходного файла (например, HTML-страница или файл .JS кодируются как ISO-8859-1) или для преодоления таких вещей, как ограничения клавиатуры.Это ничем не отличается от использования \n для указания кодовой точки перевода строки.

Приведенная выше строка ("將 探討 HTML5 及 其他") состоит из значений 5c07 63a2 8a0e 0020 0048 0054 004d 004c 0035 0020 53ca 5176 4ed6, независимо от того, записываете ли вы последовательность каклитерал или в escape-последовательностях.

Подробнее см. раздел Строковые литералы в ECMA-262 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...