首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Coding
V2EX  ›  问与答

[面试难题] 中文站点用 GBK 编码代替 UTF-8 编码,可以节约多少储存/带宽成本?

  •  
  •   nikoo · 2018-06-09 11:53:55 +08:00 · 3792 次点击
    这是一个创建于 550 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一个中文站点,平均 HTML 页面源代码(包含 JS/CSS )的中文与英文比例为 9:1
    站点没有图片,所有流量皆为 HTML 页面流量

    目前使用的是 UTF-8 编码
    内容储存成本 1,000/月
    流量带宽成本 10,000/月

    那么请问如果将该站改为 GBK 编码,如何计算修改后其储 /带宽成本?

    求教各位,这个问题题库里从没见过,网上也搜不到答案,直接蒙圈了
    第 1 条附言  ·  2018-06-09 12:43:05 +08:00
    请不要考虑这个题是否符合现实情况,如:
    GBK/UTF-8 编码的优劣
    页面中英文比例 9:1 是否可能
    流量计算成本还要包括 TCP header 等等而不是纯 HTML 页面 size 的流量
    开启 Gzip 会让流量统计"差不多"
    开启数据库表压缩让储存成本"差不多"
    UTF-8 是变长编码忽大忽小所以没法算
    44 回复  |  直到 2018-06-10 00:37:06 +08:00
        1
    haimall   2018-06-09 11:59:11 +08:00 via Android
    转了一大圈 是不是就是 gbk 与 utf-8 的编码区别?
        2
    input2output   2018-06-09 12:00:53 +08:00   ♥ 1
    中文一千字
        3
    eslizn   2018-06-09 12:01:30 +08:00   ♥ 1
    死扣存储,讲道理 utf8 是变长,怎么算都算不准的,出这题人 sb
        4
    sagaxu   2018-06-09 12:01:40 +08:00 via Android
    省下来的钱,还不够 cover 增加的开发成本
        5
    lukefan   2018-06-09 12:01:58 +08:00
    gzip 后忽略不计
        6
    daigouspy   2018-06-09 12:04:03 +08:00 via Android
    @eslizn 网络传输还会 gzip 压缩,差别很小。
        7
    nikoo   2018-06-09 12:06:15 +08:00
    @input2output @haimall 用公式如何计算这个差别?

    @eslizn "utf8 是变长"?所以无法计算其差别吗?愿闻其详!

    @sagaxu 这只是一个面试题。。。

    @lukefan 未 gzip 呢?
        8
    yidinghe   2018-06-09 12:08:37 +08:00
    楼主改为 GBK 编码之后,节省了存储空间,得到了表扬,很爽。终于到了某天发现存储内容包含了日文和韩文,于是想了个办法:将内容改为 URL 编码,自此噩梦开始了。
        9
    smdbh   2018-06-09 12:09:59 +08:00
    中英文比例 9:1,我是不信的
        10
    momocraft   2018-06-09 12:10:01 +08:00   ♥ 1
    估算: 1 汉字在 GBK2 字节 在 UTF8 3 多一点字节

    但有这个也算不出成本...你甚至不知道收费是怎么算的 lol
        11
    nikoo   2018-06-09 12:14:11 +08:00   ♥ 3
    @yidinghe @smdbh

    其实还可以喷世界上不会存在这种网站

    或者用 gbk 编码代替 utf-8 是多么可笑幼稚愚蠢的行为

    或者扣这几个字节却让网站失去了通用性是多么鸡贼的行为

    这只是一个面试题

    所以说遇到这个问题你的回答就是:没法回答,然后心里想:sb 公司出 sb 题目赶紧走人?
        12
    congeec   2018-06-09 12:18:25 +08:00 via iPhone
    Http header
    TCP header
    Up header 也都算流量哦
        13
    eslizn   2018-06-09 12:19:12 +08:00
    @nikoo utf8 变长存储的,虽然 [一般] 汉字占用 3 个字节,但是不排除有超过的,所以无法预期输入内容的情况下,做不到精准计算
        14
    nikoo   2018-06-09 12:19:32 +08:00
    @momocraft 谢谢,有一点收获和思路了

    我知道这个情况不太符合现实,并且现实世界中流量成本计算方式也不是像题目里说的那么简单

    但这就像学数学计算一个水缸的水多久会流光,
    我不能在试卷上填写:“世界上没有这种水缸”
    或者:“这不就是计算水流动速度吗?”用一个问题回答另一个问题
        15
    nikoo   2018-06-09 12:20:47 +08:00
    @eslizn 谢谢,那不考虑变长,最粗略、平均、预估的计算方法有没有可能?
        16
    zhujinliang   2018-06-09 12:21:13 +08:00
    面试官问完了这个题,本想借此题发挥一下:你看,其实节省不了什么,所以不要做过度优化
    哪料程序员一拍桌子,sb 公司,老子不面了
        17
    shyangs   2018-06-09 12:23:14 +08:00   ♥ 1
    数学计算不会去维护水缸,你会去维护网站,维护 GBK 网站准备被坑吧
        18
    eslizn   2018-06-09 12:24:23 +08:00
    @nikoo 本身差距就不大,“最(这个最理解不了)粗略、平均、预估”之后有何意义?
        19
    nikoo   2018-06-09 12:26:14 +08:00
    @shyangs 不能确定他们公司真打算改用 GBK 编码吧?这只是一个题目而已
        20
    nikoo   2018-06-09 12:27:29 +08:00
    @eslizn 谢谢,所以该题的答案就是写:“因为 UTF-8 是变长编码,所以差距不大” 如此?
        21
    eslizn   2018-06-09 12:28:58 +08:00
    @nikoo 看我第一条回复,金币不多,恕不奉陪
        22
    rrfeng   2018-06-09 12:34:32 +08:00 via Android   ♥ 1
    这玩意儿要算起来得一篇论文。
        23
    Humorce   2018-06-09 12:36:08 +08:00
    源代码中英文比例 9:1
    你打开一个小说页面看看有没有这么夸张。
        24
    wdlth   2018-06-09 12:37:52 +08:00
    这是一个多层次的问题,毕竟不只是页面文本是 UTF-8 的,数据库、缓存、RPC 等地方都得算进去。
    还有一个重要的点是 JSON,根据 RFC8259,在数据交换时 JSON 的文本数据必须使用 UTF-8 编码,用 GBK 编码有得玩。
        25
    nikoo   2018-06-09 12:44:44 +08:00
    @wdlth 问题的条件里说了流量全部为 HTML 页面,并没有 JSON
        26
    3dwelcome   2018-06-09 13:03:34 +08:00 via Android   ♥ 1
    utf8 三字节,gbk 二字节。节约三分之一的磁盘空间。
    传输的话,都是压缩,基本没区别。
        27
    nikoo   2018-06-09 13:04:57 +08:00
    @3dwelcome 非常感谢!假设没有使用传输压缩的话,是否也是大约节约三分之一的流量成本?
        28
    Foolt   2018-06-09 14:37:45 +08:00
    什么垃圾问题,要是我遇到用 GBK 的公司,直接拒绝。
        29
    si   2018-06-09 15:28:17 +08:00
    GBK 和 UTF8 的英文没区别,大致情况下 GBK 中文 2 字节和 UTF8 中文 3 字节。2:3 差别大概 1/3。
    中文与英文比例为 9:1。9 可以减少 1/3。相当于中文只要 6。6+1=7。
    不考虑其他情况,内容只有原来的 70%。
        30
    nooper   2018-06-09 16:05:13 +08:00 via iPad
    题目出得挺 sb 的
        31
    SoloCompany   2018-06-09 19:17:18 +08:00   ♥ 1
    UTF8 编码是 ascii 安全的,这是最重要的一点

    大多数亚洲字符集(当然包括 GB ),要么编码空间不足无法表示所有的 unicode,要么就是 ascii 不安全

    ascii 不安全,也就是说某些 ascii 特殊字符,比如 “<“, “>”, “&”, “/“, “%” 这些,都有可能被字符集为了增加那么一点微不足道的效率而用到了编码上

    这样所造成的后果,当你碰上了就知道有多麻烦了。
        32
    BingoXuan   2018-06-09 19:37:37 +08:00 via Android
    想起微信支付 api 报错返回中文是 GBK 编码的=_=
        33
    chinvo   2018-06-09 19:45:26 +08:00
    @congeec #12

    > Http header
    > TCP header
    > Up header 也都算流量哦

    自己实现一个协议和“浏览器”,把 TCP/IP 和 HTTP 里面的“无用”以及“保留”的字节全部清理掉

    每个网站都要装一个自己的协议驱动和浏览器,美滋滋

    [doge]
        34
    Servo   2018-06-09 19:51:32 +08:00
    GB18030 最强(手动滑稽)
        35
    sunsol   2018-06-09 20:22:11 +08:00
    真正的问题是 html,js,css 如何能达到中英比例 9:1
    一般的情况下中文页面的中英比例基本是 1:9,
    就是小说页面中英比例最多也就 1:3,
    要想达到 9:1 这页面会是什么样子,没法想象啊。
        36
    Mutoo   2018-06-09 21:52:04 +08:00
    换成 GBK 后,PM 说,我们想在文本里支持一下 emoji,233...
        37
    lhx2008   2018-06-09 22:46:08 +08:00 via Android
    包含 css 和 js 怎么可能 9:1,1:9 还差不多,当他们是易语言吗。英文的话,UTF8 长度是一字节,所以,有啥意义?
        38
    imn1   2018-06-09 23:37:08 +08:00   ♥ 1
    汉字 /日语平假、片假 /朝鲜字符和主要标点符号都在 FFFF 以内,utf-8 对应是三字节
    部分汉字(主要是生辟字和异体字),extB/C/D 在 FFFF 以上,utf8 四字节,但这些汉字总数很少,甚少用到

    GBK 是双字节
    ASCII (0-127),utf-8/GBK 都是单字节
        39
    ilylx2008   2018-06-09 23:53:08 +08:00 via Android
    这题是考验你如何做取舍,正确答案是,为了一点点流量费,改为 gbk 是不科学的选择。
        40
    di94sh   2018-06-10 00:00:01 +08:00 via Android
    gbk 2 字节编码 utf-8 中文 3 字节
        41
    nikoo   2018-06-10 00:02:18 +08:00
    @imn1 UTF-8 编码是否存在 2 字节的汉字?还是说汉字均为 3-4 字节?
        42
    mozutaba   2018-06-10 00:19:25 +08:00   ♥ 1
    @nikoo
    占 2 个字节的:〇
    占 3 个字节的:基本等同于 GBK,含 21000 多个汉字
    占 4 个字节的:中日韩超大字符集里面的汉字,有 5 万多个
        43
    nikoo   2018-06-10 00:34:41 +08:00
    @mozutaba 谢谢,有没有常用的汉字占 2 字节的?还是仅这个 〇 是 2 字节?
        44
    imn1   2018-06-10 00:37:06 +08:00   ♥ 1
    @nikoo
    双字节的 utf-8 unicode 码为 80-07ff,这里面没有汉字
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1954 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 26ms · UTC 16:15 · PVG 00:15 · LAX 08:15 · JFK 11:15
    ♥ Do have faith in what you're doing.