当前位置: 首页 > 面试题库 >

替换Unicode控制字符

魏浩广
2023-03-14
问题内容

我需要替换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是合法的;其他一切都是非法的。



 类似资料:
  • 问题内容: 我需要替换Linux文本文件中所有出现的控制字符CTRL + A(SOH / ascii 1),如何在SED中实现呢? 问题答案: 可以使用(等同于选项并将其通过管道传递到)完成。 如果控制字符是标题(SOH)字符的开始(CTRL + A / ASCII 1),并且我们希望将其替换为制表符,则可以执行以下操作: 会将SOH字符替换为^ A,然后将其匹配并替换为。

  • 我想使用方法发送POST请求,但是我的JSON有一些国际字符,比如surunn。 不幸的是,我的WebAPI在从格式解码这个字符串时遇到了一些问题:。 使用时,我的API可以很好地处理非转义字符串和unicode转义字符串:。 我尝试了此操作,但在将转换为unicode后,转义了: 我有两个反斜杠字符串: 我试图用一个反斜杠替换两个反斜杠,但没有成功: 我该如何替换它们?

  • 问题内容: 我有一个字符串,该字符串是通过阅读HTML网页获得的,其中包含带有项目符号的项目符号,该项目符号带有“•”之类的符号。请注意,该文本是使用Python 2.7的网页的HTML来源。 我知道项目符号字符的unicode字符为,但是实际上如何用其他东西替换该unicode字符呢? 我试着做 但它似乎不起作用…我该怎么做? 问题答案: 将字符串解码为Unicode。假设它是UTF-8编码的:

  • 问题内容: 在下面查看我的代码。我有一个包含Unicode字符代码的JSON字符串。我将其转换为Java对象,然后将其转换回JSON字符串。但是,您可以看到输入和输出JSON字符串不匹配。是否可以使用Gson将我的对象转换为原始JSON字符串?我想和一样。 问题答案: 不幸的是,Gson似乎不支持它。所有JSON输入/输出分别集中在Gson(从2.8.0开始)和。可以使用其私有方法读取Unicod

  • 问题内容: 以下内容将替换ASCII控制字符(的缩写): 以下内容将替换所有ASCII不可打印字符(的缩写),包括带重音符号的字符: 但是,两者均不适用于Unicode字符串。有谁能从Unicode字符串中删除不可打印字符的好方法? 问题答案: 详细了解Unicode正则表达式。支持他们。

  • 问题内容: 当我尝试在控制台中打印字符串时,出现错误。我认为这是因为Windows控制台不接受仅字符。最好的办法是什么?有什么方法可以使Python自动打印?而不是在这种情况下失败? 问题答案: