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

使用Java调用Twitter API v2添加含非ASCII字符规则时遇JSON无效错误

解决Java调用Twitter API v2添加含非ASCII字符过滤规则的问题

问题描述

我使用GitHub上官方提供的FilteredStreamDemo.java调用Twitter API v2的过滤流端点时功能正常,但当添加包含非ASCII字符(例如单词“siccità”)的规则时,返回以下错误:

{"errors":[{"parameters":{},"message":"Invalid JSON"}],"title":"Invalid Request","detail":"One or more parameters to your request was invalid.","type":"https://api.twitter.com/2/problems/invalid-request"}

我尝试将单词转换为UTF-8但没有效果,请问在Java中是否有办法为Twitter API v2添加包含非ASCII字符的规则?

解决方案

以下是几个可行的处理步骤:

  • 配置JSON序列化工具,保留非ASCII字符原始形式
    多数Java JSON库(如Jackson、Gson)默认会把非ASCII字符转义成Unicode编码(比如\u00E0),但Twitter API v2支持直接传入UTF-8编码的原生非ASCII字符。你可以修改序列化配置,关闭自动转义:

    • 若使用Jackson:
      ObjectMapper mapper = new ObjectMapper();
      mapper.configure(JsonGenerator.Feature.ESCAPE_NON_ASCII, false);
      
    • 若使用Gson:
      Gson gson = new GsonBuilder().disableHtmlEscaping().create();
      
  • 明确指定HTTP请求体的UTF-8编码
    构建请求时,必须确保请求头和请求体都使用UTF-8编码。以HttpURLConnection为例:

    connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
    connection.setDoOutput(true);
    try (OutputStream os = connection.getOutputStream()) {
        byte[] input = jsonPayload.getBytes(StandardCharsets.UTF_8);
        os.write(input, 0, input.length);
    }
    
  • 直接使用原始字符串构造规则
    不要手动对非ASCII字符做转码操作,直接将包含非ASCII的字符串放入规则中,依赖JSON库和HTTP客户端处理编码逻辑。比如直接构造规则对象:

    String ruleValue = "siccità";
    // 推荐用JSON库序列化对象,避免手动拼接出错
    Rule rule = new Rule(ruleValue, "siccita-tag");
    String jsonPayload = mapper.writeValueAsString(Map.of("add", List.of(rule)));
    

验证要点

发送请求前,可以打印序列化后的JSON字符串,确认非ASCII字符是原始形式(如“siccità”)而非转义后的Unicode编码;同时检查请求头的Content-Type是否正确设置了charset=UTF-8。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:30:18