eclipse 如何处理URL中的对象替换字符

z9zf31ra  于 2022-11-04  发布在  Eclipse
关注(0)|答案(3)|浏览(133)

使用Jsoup来抓取URL,其中一个URL我一直得到有这个符号在它.我已经尝试解码的URL:

url = URLDecoder.decode(url, "UTF-8" );

但它仍然保留在代码中,如下所示:

我在网上找不到太多关于这个的信息,除了它是“对象替换字符,有时用于表示文档中的嵌入对象,当它被转换为纯文本时。”
但如果是这种情况,我应该能够打印符号,如果它是纯文本,但当我运行

System.out.println("");

我收到以下并发症错误:

并恢复到上次保存的状态。
示例URL:https://www.breightgroup.com/job/hse-advisor-embedded-contract-roles%ef%bf%bc/
注:如果您解码URL,然后将其与解码后的URL进行比较,结果显示不相同,例如:

String url = URLDecoder.decode("https://www.breightgroup.com/job/hse-advisor-embedded-contract-roles%ef%bf%bc/", "UTF-8");
        if(url.contains("https://www.breightgroup.com/job/hse-advisor-embedded-contract-roles?/")){
            System.out.println("The same");
        }else {
            System.out.println("Not the same");
        }
oipij1gg

oipij1gg1#

这不是编译错误,而是Eclipse代码编辑器告诉你它不能把源代码保存到文件中,因为你已经告诉它把文件保存为cp1252编码,但是这个编码不能表达一个“”。
换句话说,您的开发环境当前配置为以cp 1252编码存储源代码,而cp 1252编码不支持您想要的字符,因此您可以配置您的开发环境以使用更灵活的编码(如错误消息中建议的UTF-8)存储源代码,或者避免在源代码中包含该字符,例如使用其unicode转义序列:

System.out.println("\ufffc");

请注意,就Java语言和运行时而言,是一个字符,因此可能不需要特别“处理”它。另外,如果URL一开始就没有进行URL编码,我不知道为什么您会期望URLDecoder做任何事情。

3phpmpom

3phpmpom2#

“ef bf bc”是一个3 bytes UTF-8 character,因此如错误所示,在“CP1252”Windows页面编码中没有该字符的表示形式。
一个选项可以是用ascii表示替换百分比编码序列,以产生用于保存的文件名:

String url = URLDecoder.decode("https://www.breightgroup.com/job/hse-advisor-embedded-contract-roles%ef%bf%bc/".replace("%ef%bf%bc", "-xEFxBFxBC"), "UTF-8");
url ==> "https://www.breightgroup.com/job/hse-advisor-emb ... contract-roles-xEFxBFxBC/"

另一个使用CharsetDecoder的选项

String urlDec = URLDecoder.decode("https://www.breightgroup.com/job/hse-advisor-embedded-contract-roles%ef%bf%bc/", "UTF-8");

CharsetDecoder decoder = Charset.forName("CP1252").newDecoder().onMalformedInput(CodingErrorAction.REPLACE).onUnmappableCharacter(CodingErrorAction.REPLACE);
String urlDec = URLDecoder.decode("https://www.breightgroup.com/job/hse-advisor-embedded-contract-roles%ef%bf%bc/", "UTF-8");
ByteBuffer buffer = ByteBuffer.wrap(urlDec.getBytes(Charset.forName("UTF-8")));
decoder.decode(buffer).toString();

测试结果

"https://www.breightgroup.com/job/hse-advisor-embedded-contract-roles/"
7d7tgy0s

7d7tgy0s3#

我发现这个问题通过用这个符号替换URL来解决,因为还有其他带有Unicode符号的URL是不可见的,无法转换等等。
所以我只是比较了URL和下面的正则表达式,如果它返回false,那么我就绕过它。希望这能帮助一些人:

boolean newURL = url.matches("^[a-zA-Z0-9_:;/.&|%!+=@?-]*$");

相关问题