You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java应用中如何用ISO-8859-1编码JSON?Shopify接口字符乱码求助

解决Java调用Shopify API的字符乱码问题

问题根源

你的乱码本质是UTF-8字节被错误地以ISO-8859-1编码解码:比如ú的UTF-8是0xC3 0xBA,当成ISO-8859-1读就会变成ú,和你遇到的现象完全匹配。

问题出在两个核心点:

  • curl请求里指定了Accept: application/json;charset=ISO-8859-1,但Shopify API实际返回的是UTF-8编码的响应,不会因为你指定这个头就转码。
  • 你尝试的几次手动转码操作都是无效甚至有害的:Java的String内部是UTF-16编码,直接对toString()的结果做字节转换只会破坏原有编码逻辑。

另外,两台Win10机器的显示差异是因为应用/控制台的默认编码不同:你的机器默认用UTF-8解析输出,另一台可能用了GBK或系统默认的ISO-8859-1,导致已经错误的字符显示更异常。

修复步骤

1. 修正请求的Accept头

直接去掉charset指定,或者明确要求UTF-8:

curl --ssl-no-revoke -sb -X GET "myshopiy_url" -H "X-Shopify-Access-Token: token" -H "Accept: application/json;charset=UTF-8"

如果是用Java HTTP客户端(比如HttpClient、OkHttp)调用,务必确保客户端以UTF-8解码响应,不要依赖系统默认编码。

2. 移除所有手动转码代码

直接使用原始字符串即可,不需要做任何字节转换:

String destination_name = destination.get("first_name").toString() + " " + destination.get("last_name").toString();

如果用JSON解析库(比如Jackson、Gson),要确保解析器用UTF-8读取响应流,不要指定错误的编码。

3. 统一输出/显示的编码

如果是控制台输出,启动Java程序时指定编码参数:

java -Dfile.encoding=UTF-8 YourMainClass

如果是GUI或Web应用,确保界面组件的字符编码设置为UTF-8。

验证方法

可以打印字符串的字节数组,确认是否为UTF-8编码:

import java.nio.charset.StandardCharsets;
import java.util.Arrays;

// 加入到代码中验证
byte[] bytes = destination_name.getBytes(StandardCharsets.UTF_8);
System.out.println(Arrays.toString(bytes));

比如Número的UTF-8字节应该是[78, -61, -86, 109, 101, 114, 111],如果匹配说明编码正确,剩下的就是显示端的编码配置问题。

内容的提问来源于stack exchange,提问作者RJA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 00:07:52