【问题标题】:UTF-8 Bad requestUTF-8 错误请求
【发布时间】:2020-06-22 07:03:35
【问题描述】:

我有一个带有字符“Á”(西班牙语)的字符串,我对 API 的请求有一些问题。

这样我得到了 400 ERROR BAD REQUEST

String address = "Ángel Marsa I Becá è";
String encoded = new String(address.getBytes("UTF-8"));
System.out.println(encoded);//�ngel Marsa I Becá è

使用另一种方式进行编码,使用 ISO-8859-1,然后使用 UTF-8,我没有收到 BAD REQUEST 400 ERROR。

byte ptext[] = address.getBytes("ISO-8859-1"); 
String value = new String(ptext, "UTF-8");
System.out.println(value);//?ngel Marsa I Bec? ?

这种方式编码的 UTF8 是否正确?

哪种是编码为 UTF-8 的最佳方式,尤其是带有重音符号或“ñ”的字符串。

谢谢

【问题讨论】:

  • "这种方式的 UTF8 编码是否正确?"一点都不。它与编码无关,并且在许多情况下它会破坏字符串(正如您在示例中看到的那样,它们都破坏了字符串)。在 best 的情况下,它不会对字符串做任何事情。有关更多信息,请参阅here,并解释您的“编码”以及为什么它永远无法工作。
  • @Kayaman 所以不可能编码为 UTF-8,带重音的字符串?
  • 完全没有,但您的问题与此无关。您从 API 中收到错误,但您尝试的解决方案将永远无法工作。您需要担心的不是字符串,而是您调用 API 的方式。
  • JSON 应该是 UTF8。我不知道您是如何提出请求的,但显然您没有正确提出请求,因为它们不在 UTF8 中。所以修复你的请求代码,你的字符串很好。
  • 你能发布你的代码来实际提出这个请求吗?您是否在其他任何地方执行转码?

标签: java utf-8 encode iso-8859-1


【解决方案1】:

您可以使用 java.net.URLEncoder 来传递 URL 中不可接受的字符串。

String s = "Ángel Marsa I Becá è";
String e = URLEncoder.encode(s, "UTF-8");
System.out.println(e);

这看起来像%C3%81ngel+Marsa+I+Bec%C3%A1+%C3%A8

一旦通过网络获得它,您始终可以使用 UrlDecoder.decode 恢复原始文本。

【讨论】:

    【解决方案2】:

    我缺少 Content-Type 的参数 charset=utf-8。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-02
      • 2014-08-23
      • 2019-03-01
      • 1970-01-01
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      • 2017-04-24
      相关资源
      最近更新 更多