gpt4 book ai didi

java - 向api提交数据时的GSM扩展字符编码问题

转载 作者:行者123 更新时间:2023-12-01 12:28:06 26 4
gpt4 key购买 nike

通过curl 向我的API 提交URL 时遇到一些问题。我用来测试的 url 参数是 &body=+%bb%3d+ ,它位于 gms 的特殊字符集中,id 假设为“~”。

当我打印出值时,我得到“�=”

现在我知道它不在 utf-8 字符集中,这就是 unicode 替换字符被替换的原因。

必须有一种方法可以将数据传输到我的服务器而不进行替换。我使用jetty和jersey运行一个java项目。

---编辑---

好的,我已经尝试过

    @GET
@Produces(MediaType.TEXT_PLAIN)
public String submit(@QueryParam("from") String from, @QueryParam("to") String to, @QueryParam("body") String body) {
byte[] raw = body.getBytes(StandardCharsets.US_ASCII);
body = new String(raw, StandardCharsets.UTF_8);
System.out.println("data - " + body);

哪个打印出数据 - ?=将字符集从 US_ASCII 更改为 ISO_8859_1 打印出数据 - ?=

最佳答案

根据 HTTP 规范推荐的字符编码是 UTF-8 ,这就是为什么你会得到这个结果。您的代码可能依赖于 RFC2616 的一个鲜为人知的行为,即在没有编码的情况下假设 ISO-8859-1 ,这种做法后来在 RFC7231 中被放弃,取而代之的是 UTF-8除非另有声明,否则到处都是。

如果您在解析参数时需要不同的编码,请在将其从请求对象中拉出时进行设置,或使用等效的 UTF8。

例如:

/* will decode all parameters, header values, and content as ISO-8859-1 */
request.setCharacterEncoding(StandardCharsets.ISO_8859_1.name());
String actual = request.getParameter("body");
System.out.println("\"" + actual + "\"");

/* output on console of : " »= " */
/* that's a RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK followed by an EQUALS */

如果您想使用UTF8等价于 use %C2%BB%3D

选项#2,事后解码原始参数。

String raw = request.getParameter("body");
byte[] bytes = raw.getBytes(StandardCharsets.ISO_8859_1); // decode
String actual = new String(bytes, StandardCharsets.UTF_8);

更新 #1:2013 年 10 月 3 日

设置US-ASCII时您看到的结果是正确的。

%bb超出了 US-ASCII 的 7 位限制,因此它显示在替换字符中。

Java 示例:

    // as us-ascii
String decoded = URLDecoder.decode("+%bb%3d+",StandardCharsets.US_ASCII.name());
System.out.printf("Decoded: '%s'%n",decoded);

更新 #1:2013 年 10 月 3 日

至于 GSM 字符集,我找不到对任何 GSM 字符集的内置 Java 支持,您需要深入了解字符集、编码等,然后,当您非常熟悉时它,您可以查看适用于 java 的第 3 方库,它们将采用 UTF-8 或 ISO-8859-1 并将它们转换为 50 个已发布的 GSM 字符集之一。

示例(仅 1 个 GSM 字符集指定):

http://embeddedfreak.wordpress.com/2008/10/08/java-gsm-0338-sms-character-set-translator/

或者你可以找到你想要的UTF-8字符,将其弹出到online UTF-8 Tool中(作为一个字符),并将其回溯到您随后使用的十六进制代码点。

关于java - 向api提交数据时的GSM扩展字符编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26179006/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com