zoukankan      html  css  js  c++  java
  • SpringCloud框架:经由gateway网关转接的接口返回的json数据中部分中文偶尔出现乱码的问题

    一、问题如下:

      页面出现乱码问题,且是偶发性的,不定时出现一次:

      

      

    二、问题定位:

      1、排查编码格式:

      前端、后台、数据库都为UTF-8,基本排除由于编码格式问题引起的乱码。

      2、postMan直接访问后台接口:

      返回的数据中包含乱码,缩小范围到后台。

      3、service层和controller层断点:

      数据都是正常的,缩小范围到返回时处理的过程。

      4、这个时候要想到的只有过滤、拦截、统一处理之类的配置文件:

      在测试库中手动修改发生乱码的数据,在前面加了个空格,发现返回的数据正常了,去掉空格以及发生乱码的文字,返回的数据中后面的字符依旧是变成了乱码,由此可以发现一个问题:

      乱码的位置是固定的,只要是卡在这个位置的就会出现乱码,而且可能乱码的位置不止一个,只是因为这里恰好是中文,所以变成了乱码。

      然后通过postMan分别使用网关转接和直接访问两种方式取服务里的返回数据,结果发现,网关转接的是有乱码的而直接访问的是正常的。

      在网上查阅了一些资料,终于定位了问题就在gateway网关对response的处理上。

    三、问题处理:

      截断引起的问题就用拼接来解决:

    super.writeWith(fluxBody.buffer().map(dataBuffers -> {
    DataBufferFactory dataBufferFactory = new DefaultDataBufferFactory(); DataBuffer join
    = dataBufferFactory.join(dataBuffers); byte[] content = new byte[join.readableByteCount()]; join.read(content); DataBufferUtils.release(join); String responseData = new String(content, Charsets.UTF_8); }); )

      

  • 相关阅读:
    Assembly Manifest 通俗简易手册
    CruiseControl服务器安装配置
    关于URL编码
    从A到Z来说说Web开发
    通过注册表查看 .NET Framework的版本信息
    云数据存在哪里?
    C#中你可能不知道的8件事(zz)
    用PBKDF2 或BCrypt 来存储密码
    C++编译器什么时候为我们自动生成拷贝构造函数?
    C#中你可能不知道的8件事(zz)
  • 原文地址:https://www.cnblogs.com/guobin-/p/14941345.html
Copyright © 2011-2022 走看看