zoukankan      html  css  js  c++  java
  • 真假空格风波

    一次上传文件时,文件名中有空格,导致上传以后无法下载,查明原因后,代码中处理掉了空格,经测试,存在空格时可以正常下载,不报404了。

    后来,客户亲自上传时,发现问题依旧,有文件名中有空格时无法下载。我们又测试,有空格可以下载。本着科学的精神,我要拿到客户亲自上传的那个文件进行测试。发过来以后,果然,文件名中有空格时,上传后下载确实404。想起了上大学时的DOS时代,按住Alt输入256会出于一个“跳格”的现象,虽然不知道那是什么,看看起来就是一个空格。于是怀疑客户的文件名中的字符有可能不是空格,就把这两个文件放在了一起,做成了看起来完全一致的文件名,它们是可以在同一个文件夹下同时存在的,就说明其中一个肯定不是空格,或者说,不是我们常用的ASCII=20的那个空格。然后找到了一个能够查字符编码的网站,把客户文件名中的“空格”复制出来,粘到查询网站,得到的16进制码,现了原型,是C2A0,然后查,得到了以下的解释:

    网页UTF8转换GBK后出现问号"?"的原因

    网页编码转换是进行网页解析和处理的第一步。

    互联网上越来越多的网页采用UTF-8编码,UTF-8用1到6个字节编码UNICODE字符,收录了超过10万个字符,BMP部分也有六万多个字符

    而在进行编码转换时,我们往往需要转换为GBK编码进行后续处理,很多网页在转换后,会发现出现大量连续的问号:????????

    这些恶心的问号是在编码转换阶段引入的,原因是:

    GBK字符集只收录了两万多个字符,比UTF-8的字符数量少得多。

    转化到GBK编码的时候,就会有编码落到GBK字符集以外,不能转化成GBK编码。这部分字符在转换之后的字符串中都变成了’?’

    UTF-8:采用变长字节 (1 ASCII, 2 希腊字母和排版字符, 3 汉字等多字节东亚语言, 4 平面符号和特殊符号等),

    其中双字节字符中有一些没有在GBK字符集中,通常来说UTF-8无法识别的字符都是非常生僻的字符,几乎难以遇到,可不用考虑;但有一个字符非常特殊:C2A0

    C2A0是UTF8里的排版用空格(区别于ASCII=20的空格),这个特殊的字符(unicode序号为0xA0),不在GBK字符集中。却频繁用于xml/html等格式的文件中。大量UTF-编码的网页使用这个字符用作占位的空格。而且不同浏览器对它的处理方式不同:IE浏览器识别出该符号并以空格显示,firefox则替换为xml转义字符   当网页中用C2A0进行文字排版时,我们对网页进行编码转换为GBK时就会出现很多"?"问号

  • 相关阅读:
    win10 点击开始按钮无反应
    Server Error in '/' Application. IIS拒绝访问
    vs2017添加引用时报错未能正确加载“ReferenceManagerPackage”包。
    关于JavaScript中的this指向问题
    4p-在一张图片中根据矩形四个点的坐标计算两个矩形是否相交
    opencv使用
    [VMware]虚拟网络编辑器
    [所思所想]观《长津湖》有感
    [项目管理]失败的软件项目所具备的特点【待续】
    [软件过程/软件生命周期模型]软件过程的工具链【待续】
  • 原文地址:https://www.cnblogs.com/Sabre/p/12867015.html
Copyright © 2011-2022 走看看