zoukankan      html  css  js  c++  java
  • ISO-8859-1乱码恢复

    为兼容较旧的jQuery插件,我把jQuery版本号从2.1.x降到了1.8.x,这比加入jquery-migration插件要来得干脆。

    我没把这两个版本号的的区别一一记下来,而是直接改个版本号号。降级之后页面没有报错,我也就觉得没问题。直到有一天发现数据库非常多用户生成内容乱码了。

    通过一番调试,原因找到了:jQuery ajax使用的http方法,1.9.0之前用选项type指定。而1.9.0及之后用选项method(选项type为method的别名)指定:

    //from jquery 1.9.0
    jQuery.ajax("/action",{
        method:"POST"
    });
    //before jquery 1.9.0
    jQuery.ajax("/action",{
        type:"POST"
    });

    当把jQuery版本号从2.1.x降到了1.8.x时,以下的代码就隐藏着一个bug,不报错但非常致命:

    jQuery.ajax("/action",{
        method:"POST" //buggy
    });

    原因是jQuery 1.8.x不认选项method,意味着jQuery终于的决定使用的http方法会是默认的"GET"

    当出现乱码时。首先可能会确定服务端的字符解码有没有问题,即使服务端字符解码设置已经稳稳地应用在其它非常多项目中。

    bug显露出来了,kill掉即可。但这期间bug造成的数据库不少用户生成数据乱码怎么办。承认技术失误并向用户道歉?

    非常久曾经听说有软件能够将乱码恢复成正常文本,这说明恢复还是有希望的。现已知乱码是因未对URI进行解码造成的,因此解码之后应该就能恢复成正常文本。

    照着这样的思路我把乱码内容复制出来做了个測试:

    decodeURIComponent(escape("一直想买一个,可惜没有米啊•Š"))

    居然能够恢复出正常文本!


    于是写了个小程序,从数据库查出乱码内容。再将其恢复成正常文本。最后写回数据库。

    有时候降级不只改个版本号号那么简单,一些代码得跟着同步调整。

  • 相关阅读:
    【leetcode】236. 二叉树的最近公共祖先
    【leetcode】230. 二叉搜索树中第K小的元素
    【leetcode】309. 最佳买卖股票时机含冷冻期
    【leetcode】306. 累加数
    【leetcode】304. 二维区域和检索
    spring-framework源码编译及导入
    Java8-函数式接口理解及测试
    Mac编译RocketMQ 4.1.0
    首记
    JS表单验证
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5123907.html
Copyright © 2011-2022 走看看