这些符号是什么使网址解码器与 UTF-8 崩溃?

我正在使用URL解码器来解码字符串:


import java.net.URLDecoder;

URLDecoder.decode("%u6EDA%u52A8%u8F74%u627F", StandardCharsets.UTF_8.name());

这导致坠机


Exception in thread "main" java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern - For input string: "u6"

    at java.net.URLDecoder.decode(URLDecoder.java:194)

    at Playground$.delayedEndpoint$Playground$1(Playground.scala:45)

    at Playground$delayedInit$body.apply(Playground.scala:10)

    at scala.Function0$class.apply$mcV$sp(Function0.scala:34)

    at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)

    at scala.App$$anonfun$main$1.apply(App.scala:76)

    at scala.App$$anonfun$main$1.apply(App.scala:76)

    at scala.collection.immutable.List.foreach(List.scala:392)

    at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:35)

    at scala.App$class.main(App.scala:76)

    at Playground$.main(Playground.scala:10)

    at Playground.main(Playground.scala)

它似乎是和不允许在字符串中。我试图阅读这些符号是什么,但我一直没有成功。我在数据集中名为“页面标题字段”的字段中找到了该字符串。所以我怀疑它们是编码符号,我只是不知道哪种编码。有谁知道这些符号是什么,我应该使用哪种编码来成功解码它们?%u6%u8


qq_笑_17
浏览 223回答 2
2回答

慕妹3146593

看起来像一个非标准的基于UTF-16的“滚动轴承”编码,这是中文的“滚珠轴承”。我建议只用反斜杠,然后从阿帕奇共享资源中使用:.replaceAll%uStringEscapeUtilsimport org.apache.commons.lang3.StringEscapeUtilsval unescapedJava = StringEscapeUtils.unescapeJava(str.replaceAll("%u", "\\u"))URLDecoder.decode(unescapedJava, StandardCharsets.UTF_8.name())这应该处理这两种类型的转义:后跟数字的正常转义序列不受替换和%unescapeJava奇怪的被特殊对待(替换为),并在第一步中消除。%u\u如果(仅当)您绝对确定所有代码点都以这种方式编码,那么您可以不这样做:StringEscapeUtilsnew String(  "%u6EDA%u52A8%u8F74%u627F"  .replaceAll("%u", "")  .grouped(4)  .map(Integer.parseInt(_, 16).toChar)  .toArray)它产生res: String = 滚动轴承但我建议不要这样做,因为这种方法会分解为包含未转义字符的输入。最好使用可靠的库方法来处理所有角落的情况。"%u6EDA%u52A8%u8F74%u627Fcafebabe"

子衿沉夜

您的字符串在语法上是错误的,因为是 URL 编码的字符串。根据URL解码器解码和维基百科的爪哇多克:百分比编码必须遵循两个十六进制数字。"%u6EDA%u52A8%u8F74%u627F"%可能是你打算用的。这将是一个语法正确的 Java 字符串(具有 4 个十六进制转义 Unicode 字符),等效于 。但是,对此字符串进行 URL 解码仍然没有意义。因此,我猜错误已经发生在编码端,这首先产生了这个格式错误的URL编码字符串。"\u6EDA\u52A8\u8F74\u627F""滚动轴承"
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java