替换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

回到顶部