跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • restTemplate 中文乱码
未分類
13 1 月 2021

restTemplate 中文乱码

restTemplate 中文乱码

資深大佬 : sandman511 3

restTemplate 中文乱码
URL 是个短信接口,alarmMsgInfo 是短信的内容拼接在 URL 上
比如拼:你好, 短信发的是:浣犲ソ
这是说明编码用的 utf8 解析用的 gbk ?

大佬有話說 (11)

  • 資深大佬 : wangsongyan

    短信发出去乱码?仔细看下短信接口文档

  • 資深大佬 : wangyanrui

    看一下 StringHttpMessageConverter 源码
    记得默认的编码是 IOS 8859-1

  • 資深大佬 : springmarker

    get 方法发短信?

  • 資深大佬 : xuwei0056

    先 urlEncode ?

  • 資深大佬 : 90d0n

    “`
    List<HttpMessageConverter<?>> list = restTemplate.getMessageConverters();
    for (HttpMessageConverter<?> httpMessageConverter : list) {
    if ( httpMessageConverter instanceof StringHttpMessageConverter) {
    ((StringHttpMessageConverter) httpMessageConverter).setDefaultCharset(StandardCharsets.UTF_8);
    break;
    }
    }
    “`

    替换一下 converter 试试?

  • 主 資深大佬 : sandman511

    @xuwei0056 这个试过了 还是不行

  • 資深大佬 : chendy

    拼接在 url 上的中文要 urlEncode
    用 UrlEncoder.encode(msg, “GBK”)

  • 主 資深大佬 : sandman511

    @chendy
    @xuwei0056
    URLEncoder 之后 短信 发的是 %C4%E3%BA%C3

  • 主 資深大佬 : sandman511

    @xuwei0056
    @chendy
    使用 HttpClient PostMethod 配合 URLEncoder 是可以成功发送中文的:
    HttpConnectionManager httpConnectionManager = new MultiThreadedHttpConnectionManager();
    HttpConnectionManagerParams params = httpConnectionManager.getParams();
    params.setConnectionTimeout(5000);
    params.setSoTimeout(20000);
    params.setDefaultMaxConnectionsPerHost(1000);
    params.setMaxTotalConnections(1000);
    client = new HttpClient( httpConnectionManager);
    PostMethod post = new PostMethod(URL + URLEncoder.encode(alarmMsgInfo, “GBK”));
    client.executeMethod(post);

    但是用 restTemplate 就不行 发的是 %C4%E3%BA%C3

  • 資深大佬 : chendy

    @sandman511 忘记了,直接放 url 字符串会多一次 urlEnocded,暴力方法是下面这样自己 encode url (优雅方法是自定以 UriHandler,有点麻烦……):

    RestTemplate rt = new RestTemplateBuilder().build();
    UriComponentsBuilder uri = UriComponentsBuilder.fromUriString(“http://localhost:8080/test”);
    uri.queryParam(“x”, “中文”);
    uri.encode(Charset.forName(“GBK”));

    System.out.println(uri.toUriString());

    Map s = rt.getForObject(uri.build().toUri(), Map.class);
    System.out.println(s);

  • 主 資深大佬 : sandman511

    @chendy 可以了!感谢帮助!

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具