����򸫤ơ�(de|en)codeURIUnicode������Ф����Ȼפä��ΤǺ�äƤߤ�

sawat������ - Unicode����������
�ʤΤǡ����ҤΤ褦��ñ����ASCIIʸ���򥨥������פ����������Τ褦�ʥ������Ǥ�Unicode���������פ�Ȥä������褤�Ǥ���Java��properties�Ȥ�native2ascii�Ȥ��Τ�ĤǤ���
Decoded:
Encoded:

�פϡ�U+00ff�ޤǤ�encodeURIComponent�ߴ�������ʾ��escape()�ߴ��Ȥ�����Ρ���������encode���줿��Τϡ�CGI.pm�Ȥ��Ǥ��ۤ����Τޤ޻Ȥ��롣

�����������Ρ֤ۤܡפȤ����ۤ������Ԥǡ�����JavaScript�Ǥϡ�BMP�����ʸ����Java��Ʊ����Surrogate Pair��ɽ�����롣�㤨�С�𪚲��(U+2A6B2)�ϡ����λ��ȤǤ�𪚲�ʤΤ�����"𪚲".length��2�Ǥ��ꡢescapeɽ������%uD869%uDEB2�Ȥʤ롣�����ʤ��CGI.pm�Ǥ⿩���ʤ��ʤ롣�ˤݤ��󤬥�꡼������URI::Escape::JavaScript��Surrogate Pair���꤬̤�����ä���

�����������꤬���뤻������RFC�ˤ�

RFC 3986
pct-encoded = "%" HEXDIG HEXDIG

�Ϥ��äƤ⡢

pct-u-encoded = "%u" HEXDIG HEXDIG HEXDIG HEXDIG

�Τ褦�ʤ�Τϸ�������ʤ����������Ǥϥǡ������ѤȤ��Ƥ��򤱤������ȤΤ褦����

Dan the Man with too Many Transcoders to Maintainer

Source Code:
var _noEscapeChars = {};
(function(str){
    for (var i = 0, l = str.length; i < l; i++){
        _noEscapeChars[str.charAt(i)] = 1;
    }
})(
    '0123456789'
  + 'abcdefghijklmnopqrstuvwxyz'
  + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  + '-_.!~*\'()'
);
function encodeURIUnicode(str){
    var result = '';
    for (var i = 0, l = str.length; i < l; i++){
        var c = str.charAt(i);
        if (_noEscapeChars[c]){
            result += c;
        }else{
            var ord = c.charCodeAt(c);
            var hex = ord.toString(16);
            if( ord < 256 ){
                if (hex.length < 2) hex = '0' + hex;
                result += '%' + hex.toUpperCase();
            }else{
                while (hex.length < 4){
                    hex = '0' + hex;
                }
                result += '%u' + hex.toUpperCase();
            }
        }
    }
    return result;
}
function decodeURIUnicode(str){
    var result = '';
    for (var i = 0, l = str.length; i < l; i++){
        var c = str.charAt(i);
        if (c == '%'){
            if (str.charAt(i+1) == 'u'){
                var hex = str.substr(i+2, 4);
                result += String.fromCharCode(parseInt(hex, 16));
                i += 5;
            }else{
                var hex = str.substr(i+1, 2);
                result += String.fromCharCode(parseInt(hex, 16));
                i += 2;
            }
        }else{
            result += c;
        }
    }
    return result;
}