yuyu01011 2023-10-02 03:48 采纳率: 0%
浏览 27
已结题

关于#javascript#的问题:但是我写的只能接码数字和字符,帮我写一个解码JS问题

一段编码函数,是可以中文编码的

  function encode64(data) {
                                var BASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
                                var PAD = "=";
                                var ret = "";
                                var leftchar = 0;
                                var leftbits = 0;
                                for (var i = 0; i < data.length; i++) {
                                    leftchar = leftchar << 8 | data[i];
                                    leftbits += 8;
                                    while (leftbits >= 6) {
                                        var curr = leftchar >> leftbits - 6 & 63;
                                        leftbits -= 6;
                                        ret += BASE[curr]
                                    }
                                }
                                if (leftbits == 2) {
                                    ret += BASE[(leftchar & 3) << 4];
                                    ret += PAD + PAD
                                } else if (leftbits == 4) {
                                    ret += BASE[(leftchar & 15) << 2];
                                    ret += PAD
                                }
                                return ret
                            }

我想写一个解码的函数,我自己编写的是

function decode(encodedData) {
  var BASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567**+/";
  var PAD = "=";
  var ret = [];
  var leftchar = 0;
  var leftbits = 0;
  
  for (var i = 0; i < encodedData.length; i++) {
    var charValue = BASE.indexOf(encodedData[i]);
    if (charValue >= 0) {
      leftchar = leftchar << 6 | charValue;
      leftbits += 6;
      
      if (leftbits >= 8) {
        leftbits -= 8;
        ret.push((leftchar >> leftbits) & 255);
      }
    }
  }
  
  return ret.join('');
}


但是我写的只能接码数字和字符,中文却不行,不知道为什么
帮我写一个解码函数吧,大学生,在一个公司刚兼职,就遇到这个问题

补充一下,看了很多的回复,都有问题,基本都是汉字根本无法显示,数字编码解码出来都和编码结果不一样,比如,111编码后是AQEB,但我用AQEB解码,好几个回复的都不是111,汉字解码无法显示

另外,有一个回答说,因为我BASE里没有中文字符,所以要加上,要不然不能解码函数,我不明白,那为什么编码函数没有中文,却可以编码中文呢?

希望大家写好代码,用我的编码函数测一下数字和汉字编码后的结果,再用结果测一下你们解码函数还原的是否正确

忧伤玩不起,回复的那一个HTML文件,和我编码函数很像,文件也能用,但只是很像,其中有一点不一样,没有变量PAD,希望能看懂的,根据他的解码函数帮我写一下,他那个确实很像

  • 写回答

22条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-10-02 07:39
    关注
    获得0.70元问题酬金

    你可以使用以下函数将中文进行解码:

    function decode(encodedData) {
      var BASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567**+/";
      var PAD = "=";
      var ret = [];
      var leftchar = 0;
      var leftbits = 0;
      
      for (var i = 0; i < encodedData.length; i++) {
        var charValue = BASE.indexOf(encodedData[i]);
        if (charValue >= 0) {
          leftchar = leftchar << 6 | charValue;
          leftbits += 6;
          
          if (leftbits >= 8) {
            if (leftchar >= 0x4E00 && leftchar <= 0x9FA5) { // 检查是否为中文字符
              ret.push(String.fromCharCode(leftchar)); // 将中文字符转换为实际字符
            } else {
              ret.push((leftchar >> leftbits) & 255);
            }
            leftbits -= 8;
          }
        }
      }
      
      return ret.join('');
    }
    

    这样修改后的函数会检查 leftchar 是否为中文字符的 Unicode 编码范围,如果是则会将其转换为实际字符。这样就可以正确解码中文了。

    评论

报告相同问题?

问题事件

  • 系统已结题 10月10日
  • 修改了问题 10月2日
  • 赞助了问题酬金15元 10月2日
  • 修改了问题 10月2日
  • 展开全部