代码之家  ›  专栏  ›  技术社区  ›  amos

产生适合作为Javascript标识符的易读编码的文本编码?

  •  0
  • amos  · 技术社区  · 6 年前

    1. 清晰的 :如果编码的文本看起来与未编码的文本尽可能相似(例如,用于调试),那就更好了。
    2. :我希望编码的文本是有效的JavaScript标识符( ECMA-262 Section 7.6 ).
    3. 可逆的

    我能想出3种方法中的2种,但我不知道如何得到所有3种。例如。, url encoding 不会产生合法的识别名,我想我可以改变 base64

    效率不是一个问题,所以如果有必要,我可以将编码和未编码的文本存储在一起。我能想到的最好的选择就是 url编码 $ . 我以为会有比这更好的选择,但我什么也找不到。还有更好的吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   amos    6 年前

    这对方法依赖于番石榴 PercentEscaper 似乎符合我的要求。番石榴 doesn't provide an unescaper

    private static PercentEscaper escaper = new PercentEscaper('',false)
    
    static String getIdentifier(String str) {
        //minimal safe characters, but leaves letters alone, so it's somewhat legible
        String escaped = escaper.escape(str);
    
        //javascript identifiers can't start with a digit, and the escaper doesn't know the first
        //character has different rules. so prepend a "%3" to encode the digit
        if(Character.isDigit(escaped.charAt(0))){
            escaped = "%3"+escaped
        }
    
        //a percent isn't a valid in a javascript identifier, so we'll use _ as our special character
        escaped = escaped.replace('%','_');
    
        return escaped;
    }
    
    static String invertIdentifier(String str){
        String unescaped = str.replace('_','%');
        unescaped = URLDecoder.decode(unescaped, "UTF-8");
        return unescaped;
    }