替换Unicode控制字符
我需要替换Java字符串中的所有特殊控制字符。
我想问一下Google Maps API v3,而Google似乎不喜欢这些字符。
例如:http
:
//www.google.com/maps/api/geocode/json?sensor=false&address=NEW%20YORK%C2%8F
该URL包含以下字符:http
:
//www.fileformat.info/info/unicode/char/008f/index.htm
因此,我收到了一些数据,并且需要对该数据进行地理编码。我知道某些字符不会通过地理编码,但是我不知道确切的列表。
我找不到有关此问题的任何文档,因此我认为Google不喜欢的字符列表是这样的:http
:
//www.fileformat.info/info/unicode/category/Cc/list.htm
是否有已经建立的函数来摆脱这些字符,还是我必须构建一个新的函数,并逐个替换?
还是有一个很好的正则表达式来完成这项工作?
有人知道Google不喜欢哪个确切的字符列表吗?
编辑:Google为此创建了一个网页:
https://developers.google.com/maps/documentation/webservices/?hl=fr#BuildingURLs
回答:
如果要删除“其他/控件Unicode”类别中的所有字符,可以执行以下操作:
System.out.println( "a\u0000b\u0007c\u008fd".replaceAll("\\p{Cc}", "")
); // abcd
请注意,这实际上是'\u008f'
从字符串中删除(以及其他)Unicode字符,而不是从转义的表单"%8F"
字符串中删除。
如果黑名单不能很好地被一个Unicode块/类别捕获,则Java确实具有功能强大的字符类算术,可以使用相交,减法等。或者,您也可以使用否定白名单方法,即,您不必明确指定哪些字符是非法的,而是可以指定合法的,然后其他所有内容都将变为非法。
API链接
java.util.regex.Pattern
- regular-expressions.info/Character类
例子
这是一个减法示例:
System.out.println( "regular expressions: now you have two problems!!"
.replaceAll("[a-z&&[^aeiou]]", "_")
);
// _e_u_a_ e___e__io__: _o_ _ou _a_e __o __o__e__!!
该[…]
是 字符类
。[aeiou]
匹配任何小写元音之一的东西。[^…]
是一个 否定的 字符类。[^aeiou]
匹配小写元音以外的 任何 一种。
[a-z&&[^aeiou]]
匹配项[a-z]
减去[aeiou]
,即所有小写辅音。
下一个示例显示了否定白名单方法:
System.out.println( "regular expressions: now you have two problems!!"
.replaceAll("[^a-z]", "_")
);
// regular_expressions__now_you_have_two_problems__
只有小写字母a-z
是合法的;其他一切都是非法的。
以上是 替换Unicode控制字符 的全部内容, 来源链接: utcz.com/qa/410532.html