收藏
回答

企业微信 api创建账户 姓名乱码 中文转utf-8无效?

原样创建用户到企业微信

麻烦把中文转utf-8的编码提供出来好吗?

回答关注问题邀请回答
收藏

2 个回答

  • 快乐小航
    快乐小航
    2022-02-25

    解决方法:

     public String doHttpPost(String url,String json) throws UnsupportedEncodingException {
            // -------------------------------> 获取Rest客户端实例
    
            // -------------------------------> 解决(响应数据可能)中文乱码 的问题
            List<HttpMessageConverter<?>> converterList = restTemplate.getMessageConverters();
            converterList.remove(1); // 移除原来的转换器
            // 设置字符编码为utf-8
            HttpMessageConverter<?> converter = new StringHttpMessageConverter(StandardCharsets.UTF_8);
            converterList.add(1, converter); // 添加新的转换器(注:convert顺序错误会导致失败)
            restTemplate.setMessageConverters(converterList);
    
            // -------------------------------> (选择性设置)请求头信息
            // HttpHeaders实现了MultiValueMap接口
            HttpHeaders httpHeaders = new HttpHeaders();
            // 设置contentType
            httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);
            // 给请求header中添加一些数据
    //        httpHeaders.add("JustryDeng", "这是一个大帅哥!");
    
            // ------------------------------->将请求头、请求体数据,放入HttpEntity中
            // 请求体的类型任选即可;只要保证 请求体 的类型与HttpEntity类的泛型保持一致即可
            // 这里手写了一个json串作为请求体 数据 (实际开发时,可使用fastjson、gson等工具将数据转化为json串)
            String httpBody = json;
            HttpEntity<String> httpEntity = new HttpEntity<String>(httpBody, httpHeaders);
    
            // -------------------------------> URI
            StringBuffer paramsURL = new StringBuffer(url);
            // 字符数据最好encoding一下;这样一来,某些特殊字符才能传过去(如:flag的参数值就是“&”,不encoding的话,传不过去)
    //        paramsURL.append("?flag=" + URLEncoder.encode("&", "utf-8"));
            URI uri = URI.create(paramsURL.toString());
    
            //  -------------------------------> 执行请求并返回结果
            // 此处的泛型  对应 响应体数据   类型;即:这里指定响应体的数据装配为String
            ResponseEntity<String> response =
                    restTemplate.exchange(uri, HttpMethod.POST, httpEntity, String.class);
    
            // -------------------------------> 响应信息
            //响应码,如:401、302、404、500、200等
            System.err.println(response.getStatusCodeValue());
    //        Gson gson = new Gson();
    //        // 响应头
    //        System.err.println(gson.toJson(response.getHeaders()));
    //        // 响应体
            if(response.hasBody()) {
                System.err.println(response.getBody());
                return response.getBody();
            }
    
            return "";
        }
    


    2022-02-25
    有用
    回复
  • Mr.Zhao
    Mr.Zhao
    2022-02-25

    用postman也有问题?代码一写就对?

    2022-02-25
    有用
    回复 10
    • 快乐小航
      快乐小航
      2022-02-25
      试了好几个编码方式,别的中文名字都是这样转就是中文
      2022-02-25
      回复
    • Mr.Zhao
      Mr.Zhao
      2022-02-25回复快乐小航
      我用RestTemplate。工具类不一样,代码也不一样,有的工具类有缺省配置
      2022-02-25
      回复
    • 快乐小航
      快乐小航
      2022-02-25回复Mr.Zhao
      一样的发送方式啊
      2022-02-25
      回复
    • Mr.Zhao
      Mr.Zhao
      2022-02-25回复快乐小航
      没问题,所以我说让你用postman看看 。有些工具类确实麻烦,需要配置,RestTempalte直接请求
      2022-02-25
      回复
    • Mr.Zhao
      Mr.Zhao
      2022-02-25回复快乐小航
      一样的发送方式,啥意思呢?
      2022-02-25
      回复
    查看更多(5)
登录 后发表内容