javascript - 产生适合作为 Javascript 标识符的清晰编码的文本编码?
问题描述
我正在开发一种工具,它可以读取任意数据文件并根据其数据创建一个表,然后将其存储在数据库中。我想保留列标题。列标题已经是 ASCII 文本(或者可能是 latin1),但它们的字符不是有效的变量名(例如,空格、%),所以我需要以某种方式对它们进行编码。我正在寻找具有以下属性的列标题的编码:
- 易读:如果编码文本看起来与未编码文本尽可能相似(即,用于调试),那就太好了。
- 合法标识符:我希望编码文本是有效的 JavaScript 标识符(ECMA-262 第 7.6 节)。
- 可逆:我希望能够从编码文本中获取准确的原始文本。
我可以想到适用于 3 个案例中的 2 个的方法,但我不知道如何获得所有 3 个。例如,url encoding
不会产生合法的标识符名称,我想我可以转换base64
为合法的,但事实并非如此清晰易读,我目前所拥有的只是做了一些替换,所以它是不可逆的。
效率不是问题,因此如有必要,我可以将编码和未编码的文本存储在一起。我能想到的最佳选择是使用url encoding
百分比,然后将其交换为$
. 我认为会有比这更好的选择,但我找不到任何东西。有更好的吗?
解决方案
这对依赖Guava的方法PercentEscaper
似乎符合我的要求。Guava没有提供 unescaper,但考虑到我这里的简单需求,我可以只使用一个简单的 URLDecoder。
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;
}
推荐阅读
- css - 透视在 FireFox 上不起作用
- java - 使用增删词的索引和内容更新原句
- python - python 2相当于带有pandas df的get_dummies
- inheritance - xamarin 表单继承实现
- docker - Docker中的“CMD [“-?”]”是什么意思?
- python - 将 Python 中的嵌套列表解压缩到 DataFrame(不成功)
- django - 问题升级到 Wagtail 2.1
- powershell - 是/否 SharePoint 列表中的类型不会导出到 CSV
- python - 无法在聊天中显示错误
- angularjs - Angularjs 我可以在另一个模块中声明模块吗?