"周六"的“六”在手机上显示为乱码?
发布于 6 年前 作者 junpan 8794 次浏览 来自 问答

你想反馈一个 Bug

一、* Bug 表现是什么?预期表现是什么?

同样的数据,"周六"的“六”在开发者工具中是正常的,但到了我的手机上显示为乱码

开发者工具上显示(选的iphone6作为模拟器):

手机上显示(华为Mate9):

二、* 如何复现?

后台返回1,2,3,4,5,6,7 的字符,通过前端进行格式化,其中只要“周六”和其他的星期一起出现就显示出乱码了。但单独只有“周六”时正常,将“六”换为“6”显示也正常。

前端格式化代码如下:

function formatRepeat2(repeat2){
  if (repeat2 != undefined && repeat2 != '') {
    if (repeat2.indexOf(',') > -1) {
      var total = '';
      var arrRepeat2 = repeat2.split(',');
      for (var j = 0; j < arrRepeat2.length; j++) {
        if (arrRepeat2[j] == '1') { total += ' 周日'; }
        else if (arrRepeat2[j] == '2') { total += ' 周一'; }
        else if (arrRepeat2[j] == '3') { total += ' 周二'; }
        else if (arrRepeat2[j] == '4') { total += ' 周三'; }
        else if (arrRepeat2[j] == '5') { total += ' 周四'; }
        else if (arrRepeat2[j] == '6') { total += ' 周五'; }
        else if (arrRepeat2[j] == '7') { total += ' 周六'; }
      }
 
      return total;
    }
    else {
      if (repeat2 == '1') { repeat2 = ' 周日'; }
      else if (repeat2 == '2') { repeat2 = ' 周一'; }
      else if (repeat2 == '3') { repeat2 = ' 周二'; }
      else if (repeat2 == '4') { repeat2 = ' 周三'; }
      else if (repeat2 == '5') { repeat2 = ' 周四'; }
      else if (repeat2 == '6') { repeat2 = ' 周五'; }
      else if (repeat2 == '7') { repeat2 = ' 周六'; }
 
      return repeat2;
    }
  }
  else
  {
    return '';
  }

}


调用层:

that.data.listlog[i].repeat2 = formatRepeat2(repeat2);


三、* 提供一个最简复现 Demo

见以上

10 回复

@郑竣鸿 23楼的兄弟:

谢谢帮我进行了代码检视!很多年未被代码检视过了,呵呵,虽然这个不重要,还是谢谢了! :)

依旧不能复现,太奇怪了。

你好,请问有在其他手机上复现这个问题吗?

黑人问号。

这个问题比较诡异,可能是之前的代码触发了一些奇怪的bug导致。

感谢,已收到。

目前推断是 es6 转 es5 时中文处理不对导致出现乱码,仅在一部分pc预览、上传项目时出现,具体原因还在排查中。

问题规避方案:对乱码字符串所在的 js 文件稍作修改,如增加一些无意义的函数调用、调换一些逻辑顺序等,都有可能规避问题。

@文豪

能不能另开一帖详细描述下你的问题?请在下方回复一下你的新帖链接。

昨天差点被这个bug坑死,

有一处中文字符串判断一直不过,

后来关了ide重新打开就正常了!

怀疑是有文件分块时截断问题。能否告知有问题时“六”这个字符位于这个文件的第几个字节呢?

楼主你这个改成switch循环不是更好吗,虽然不知道问题在哪里。

回到顶部