百科问答小站 logo
百科问答小站 font logo



中文在数学表达上是否处于劣势? 第1页

  

user avatar   song-zhu-shi-74 网友的相关建议: 
      

首先要明白,“数字”表达和“数学”表达是两回事。

像“法语把97说成4*20+10+7”这种经年烂梗,甚至还有“法语数字表达如此怪异,为何法国却能出这么多大数学家”之类的言论,都是混淆了“数字”和“数学”的表达。但“数字”并不只存在于“数学”的范畴中,“数学”也并不必须通过“数字”来表达。

对于这个问题,简单的回答是:

如果指的是“数字”的表达,汉字数字系统在世界语言中是一套比较有优势的系统(尤其在古代),但相比于现在人类通用的印度-阿拉伯数字系统,汉字数字仍然有所局限。

如果指的是“数学”的表达,那么全人类的任何一门现有语言和文字在“数学”范畴内都是处于劣势的。而人类也早就明白了这一点,所以很早就发展出了一套超越现有语言的数学符号体系,而这套体系也早就已经随着现代教育的普及而被全人类接受。可以说,“数学语言”本身就是人类最成功的一次“通用语”实践。

==========================

下面分开来说。

首先,对于“数字”的表达,汉字数字系统在人类的原生语言中的确是存在一定优势的,主要体现在两点:一,规整且直观地适配了十进制计数;二,言文一致

这里我们要认识一点:“数字”是一种介于“语言”和“文字”之间的语言学实体。一个有自身语言的民族可以没有自己的文字,但他们一定会有自己的口语计数体系。相比于书面文字,数字要简洁和直观得多,这使得在人类语言中,数字极易发展成“训读”模式,也就是人们口头说的是一套,但写出来的又是另一套不相关的符号。

而像“英语的11不是10+1”“法语把97说成4*20+10+7”这类现象,本质上就是人类语言的计数系统普遍缺乏“言文一致”规则的体现,换言之,无论英语的“eleven”还是法语的“quatre-vingt-dix-sept”,这都是口语层面的“数”(shǔ),而非书面语的“数”(shù)。欧洲语言中11~19和20~90的屈折词尾变化,以及法语受日耳曼影响产生以20为基底的特殊计数模式,本质都是在记录人类幼儿习得母语时,从小到大“数”(shǔ)出整个计数体系的过程。事实上,比这更奇怪的计数方式,比如北欧语言的10基和20基杂糅模式,朝鲜语中20到90的每一个整十数都有独立说法等,都是人类口语计数的习惯残留。

但在另一方面,古人发展文字的同时就已经达成了共识:即便是纯表音文字,表达数字时也不会说什么就写什么。最典型的就是由古希腊人发明,在罗马时期壮大,并在中世纪欧洲一直传承的罗马数字系统。罗马人口头说“septuāgintā quattuor”,字面上是septuā(七)+gintā(几十)+quattuor(四);但写出来却是“LXXIV”,字面上是L(50)+XX(20)+IV(5-1)。换成一个操古英语的人,口头说的会是“fēoƿer and hundseofontiġ”,写出来却依然是“LXXIV”。也就是,整个西方语言的口语和书面数字表达在罗马数字时期就已经完全分离了。

相反,汉字数字正是一套从一开始就高度“言文一致”的系统,中国古人从上古时期开始就已经形成了分析式的计数思维,可以按照直观的十进制思维构建数字,而不必使用屈折词尾表达“十几”“几十”,或是为“几十”单独命名。而这样的直观思维加上汉字本身的非表音特性,也使得汉字的书面数字始终与口语高度契合,而不必像罗马数字那样发展成一个与口语完全无关的系统。可以说,中国古代即便是文盲也可以很轻易地理解任何一个数字,但欧洲古代的文盲就未必能看懂超过一百的大数了(所以欧洲古代的货币普遍不采用十进制换算,而是要设置多级单位)。

不过,相较于现代的阿拉伯数字,古代原生的汉字计数系统仍然有着一定的局限,这之中最大的局限还是在于——没有“数位标记”的观念。汉字计数系统的实质是一套基于十进制的计量系统,十、百、千、万、亿、兆……本质上都是“单位”,依次以十的基数换算。“三千零五”的含义是“三个千位再多余五个个位”,“零”本意是“多余”。而早在上古时期,中国人就已经意识到了这一点,于是又发明了另一套符号——算筹,并在其中加入了数位标记的概念,但此时的算筹就已经和汉字数字分道扬镳了。

直到古代印度人引进“0”的符号并完善了数位标记的概念,发明出的计数系统经阿拉伯人传入欧洲,并在科学革命时期被大幅推广,由此产生的数字符号又在近代被传播到全世界,人类才真正拥有了一套完善的“数字表达”体系。但在这个过程中,人类的口语计数并没有发生本质的改变,不管是“十一”还是“XI”还是“11”,口语上都仍然是“eleven”或“shi yi”,人类实质上更习惯了数字上言文分离的抽象思考方式。

所以,如果你对英国人说“two zero two one”年,他们一般会知道你在说什么(因为现代人在学习使用阿拉伯数字的过程中都产生了一定的抽象数字意识),但他们理解起来肯定会比理解“two-thousand twenty-one”或“twenty twenty-one”别扭。同样,你觉得跟法国人说“un-neuf-neuf-sept”年更“直观”,但法国人的母语思维就是更习惯将“1997”这个符号整体读作“dix-neuf cent quatre-vingt-dix-sept”,拆成单个数字来读对他们而言也是“知道说什么但就是别扭”。

===================

我们已经看到,如今全世界通行的阿拉伯数字本身就是一种超越任何既有语言的通用符号,现代人已经能接受用同一个“90”来同时表示“ninety”“quatre-vingt-dix”或“jiǔ shí”,这就是一种简单高效的抽象思考方式。而事实上,阿拉伯数字也正是“数学符号体系”——这套科学革命以来成型的、人类历史上最成功的“通用语”实践的缩影。

探索创立“通用语”,正是科学革命时代的一大标志性学术运动,当时的笛卡尔和莱布尼茨都在此领域做了深入研究。而数学本身就是人类发展“通用语”的首要桥梁。自古以来,无论是东方人的算筹、算盘,还是西方人的几何学,本质都是一套超越基础语言的高层次逻辑语言(西方人发展出抽象的几何学,基本动机很可能就是因为现实中的数字表达体系和语言过于繁琐)。而科学革命后,抽象的数学符号一步步形成体系,并最终发展成了相当接近一门“语言”的系统。实际上,如果你看牛顿的《自然哲学的数学原理》的原稿,就会发现,里面大量的篇幅还要借助现实语言来表述(比如《原理》还未使用“=”“>”这样的基础符号),但再看一个世纪后欧拉的论文,上面的内容就和如今的书面数学推导过程比较类似了。这个演化的过程足以说明,人类的任何一门现有语言,无论汉语、英语、法语等等,相比于数学本身都是处于劣势的。

这里我们不妨总结一下,“数学语言”与一般人类语言相比究竟有何不同?

一,“言”和“文”完全分离。无论是“123”“+-×/”还是“=><”,它们都不存在任何“标准读法”,但又都具有明确的抽象含义,任何一门语言都可以按本语言的说法来表达出这些含义(也就是“训读”),这使得数学符号可以完全不依附于任何一种现实语言,但同时又能让操任何现实语言的人轻易理解。

当然,现实中我们惯例上会使用拉丁字母及少数希腊字母来表达公式中的参数和变量,或者用来标记几何图形,但这也只是一种命名的习惯而已,不具备科学的意义。另外,数学语言在“语法”上似乎更接近于“SVO”语言的习惯,这导致日语只能借用英语的“plus”“minus”来表达“+”“-”(按黏着语习惯运算符号更应该放在变量后面),当然这也只是小问题。

二,高度二维化。这可以说是数学语言区别于传统人类语言的标志性特征。从最基础的变量附加上下标,到分数、幂指数、求和、微积分、排列组合等等,现代数学语言的一大基本设计,正是充分利用纸面上的二维空间来完成逻辑的表达与演绎。二维化的数学符号不仅可以进行语义和功能的区分,也可以直观地展现运算的过程。

相反,人类的传统语言和文字,无论是纯表音的字母文字还是兼表意音的汉字,由于必须承担口语记录的功能,其基本架构都只能是一维的。这造成的一个有趣现象是:或许数学语言的二维架构过于“先进”,以至于在基本只适配了人类语言传统的一维表达方式的计算机上,本来可以在纸面上轻易书写的数学公式,却反而成了一套处理起来不太方便的系统。这也进一步说明,现有的所有人类语言相比与“数学语言”,都是处于劣势的。

=====================

最后再宣传一下,如果你对本文所涉及的符号、语言与科学逻辑话题感兴趣,还可以阅读我的新书《计量单位进化史》,书中还有更多关于数字表达、进位制、单位换算等话题的内容。

参考阅读:

为什么人类可以长期使用不同数位进制,而丝毫不显得凌乱,还切换自如 ?

「亿」是如何从「十万」变成「万万」的?

佛教中为什么会产生的那么多超级大的数量单位?


user avatar   Ivony 网友的相关建议: 
      

数学里面一切皆符号,没有什么字母……


譬如说美国人看到an一定想到这是一个不定冠词,

而在数学里面,这通常表示系数a乘以一个自然数n……



所以美国人数学不好是有原因的……


user avatar   xi-da-peng-5 网友的相关建议: 
      

数学家花了那么长的时间建立起数学的符号体系,就是因为觉得所有的自然语言都不够严谨。


user avatar   miao-bing-74 网友的相关建议: 
      

0123456789+-×÷≈≡≠=≒≌≤≥<>∫∬∭∮∯∰∞∧∨∪∩∈∵∴⊥∠√

来 告诉我 这些是哪国文字

你要说用个xyz就是体现字母性了 它除了比写甲乙丙省事儿外 它是表现了cock的含义还是体现了dick的意思啊


user avatar   chenywip 网友的相关建议: 
      

一看就是没有学过高等数学 ○| ̄|_

≥∑≯∈∠∫∵∴≌‰∝∮∞∩Ψ

看看26个字母里你能找几个,最简单的加减乘除都+-×/都不是英语字母表达。

至于x,y,z,a,b,c代表未知数,只是习惯和简单而已。你用天干地支表示照样算出来。

甲+乙=3;甲-乙=1。不照样算出来吗!

至于1234567890那是阿拉伯数字,印度人发明的。

至于中文在数学表达处于劣势的问题, 简直就是无知好吗!

数学表达如果是分为语言表达和字面表达,那语言表达是基本没有优势劣势的。不过中文的单音节的数字发音简直完爆其他语言。英语的语言表达很麻烦的有没有?zero,one,two,...如果说110,中文就妖妖灵,英文还要one,one,zero万万泽儿肉,这里还看不出差别。我们在加减乘除,英语发音加and ,plus , added to;minus, 减taken from, subtracted from ;乘 multiply···by···/ multiplied by / time,除divide···by···/ divided by / divide···into··· / into、divide,很麻烦有没有!3*5=15,Three times five is (makes, will be , equals, is equal to ) fifteen .表达太多,烦琐,等于=还几种说法,还搞个时态的东西。中文多简单,就一个说法,三乘五等于十五,简便快捷,发音简单。

11发音eleven和one完全没有关系12twelve和two貌似有点关系。这些还是小问题,大问题是乘法口诀。老外一般人数学差,为啥啊。不背乘法表啊!

英国首相卡梅隆问小学生9*8等于多少?被反问11*12等于多少然后就被尬住了。一国首相连简单的二位数乘法都搞不定(-ι_- )

关键就是英文不好背啊,三四一十二,英文是threeforetwelve,三五一十五,英文是threefivefifteen,完全不押韵。英国要引进上海的数学教法,背中文乘法表。貌似效果也不咋滴,毕竟不是母语。


所以在数学的语音表达上,中文完爆英文。至于书面表达,除了常用的a,b,c,x,y,z,和使用英文注释那不是英语表达简便,只是习惯而已。任何一种表音语音的字母都可以拿来用,比如俄语。如果冷战苏联赢了,使用俄语来表示也不是不行。

如果未来中国占据世界学术主流,全部用拼音注释也没有问题,用天干地支表示未知数也没问题。


天干地支不能表达未知数?

naive,把甲乙丙丁简化成一笔的符号不就OK了。参考草书在标准化就OK 了。




至于说拼音不能用来注释,更是naive。同音字过多是汉字的缺点,但用来注释简直太方便。

比如概率probability在学术里通常用P 来表示。如果表示什么的概率就P(something),前面还要专门一句话来描述P。不描述你咋知道P是描述概率,还是描述功率呢!

拼音就简单了,可以直接Gailv(shiqing),功率就直接用Gonglv(shiqng)。看起来比较长是不是?不用着急,可以再简化。像什么an,ang,in,ing...之类的这些都可以简化成一个字母。比如Gonglv(shiqing)可以简化成 Gㄅlv(sㄆqㄇ) 。总共就8个字母就能描述一个概念,基本不用去去描述。

你用英文描述P(something),你得要先描述P是什么玩意,是概率还是功率。再something你还不能用简写,不然你还得描述S是什么玩意。用简化的拼音,8个字母就搞定了。这不仅仅这地方8个字母搞定,在其他地方基本能用8个字母搞定。比如某物的高度。Gㄅdu(mㄆwu)8个字母搞定,这就带来中文注释的整体的规范性。

英文注释某物的高度H(building),你要描述H是代表hight,building不能缩写。一缩写就要还要注释B是啥玩意。

忒麻烦有没有,英文里面的但凡是简写或缩写都要用单独一句话描述某个字母或缩写表示什么玩意。一个简写或缩写就要用一句话描述。

至于汉语的同音字多的问题,压根不是问题。用来注释肯定用词语,注释高度就用四个字母拼音描述,完全没有疑议。

最后至于评论中关于本文说外国人数学差的评论,你个杠精。

至于评论这不能,那不能的。我就想跟你说一切都有可能。英语的价值发掘基本到头了,汉语的价值发掘还刚刚开始。

一些人用惯了外国人发明的键盘就永远觉得键盘就该那个样,见惯了windows就觉的电脑就是那个样,见惯了英文期刊就觉的学术论文就该是那个样。思想观念老的跟姥姥一样。我想对这些人说,我和你们存在着代沟,我从不跟姥姥争她认为是对的观念。所以我也懒的跟你们争你们认为是对的观念。

英语就像银行卡号,汉语就想二维码。没被发掘的时候一毛不值,一旦被发掘就大杀四方。


user avatar   inversioner 网友的相关建议: 
      

没有好的语言可以表达数学。

我觉得,假如中国一直用中文表述数学,到一定程度,各种符号也会出来的,只不过不一定与现在一样罢了。

其实在能较好理解的前提下 ,自然语言越少越好。


user avatar   li-jian-qiu 网友的相关建议: 
      

中文在数学表达上明显有优势,这个很早就有人说过。

123456789 10,这些数字虽然是阿拉伯数字,但是你看到这些数字的时候,它会在你脑袋里面转化成:

一二三四五六七八九十之类的中文

而在美国人的脑子里面转化为

one two three four five six seven eight nine ten之类的英文。

但是从11以后就不一样了。

中文的11,就是十一。

英文的十一,是eleven

其实eleven这个单词在中国人眼里是没有道理的,它就不该叫eleven,应该叫ten one。

不能说从11以后英文突然转了个弯,你难道是二十进制么?

eleven这个单词和之前从1到10的单词之间毫无联系,完全是凭空制造出来的。

到了20的时候,中文就是二十。

英文是twenty。不应该叫twenty,应该叫two ten。

数学本来是有规律的,中文其实很遵守了数学的规律,但是英文就不是。

其他语言更是糟糕,像什么法语。


user avatar   zhan-yun-2020 网友的相关建议: 
      

是应该祭出一张“神器”了:

里耶秦简改写了世界的数学发展史。

中国古代,数学领域的辉煌成就:

《周髀算经》、《九章算术》、《海岛算经》、《孙子算经》、《张丘建算经》、《五经算术》、《五曹算经》、《辑古算经》、《夏侯阳算经》、《缀术》。

《九章算术》成书在公元一世纪,看看它的成就:

第一章“方田”,主要讲的是田亩面积的计算,包括分数的各种计算方法;
第二章“粟米”,讲各种比例问题,特别是关于各种谷物间按比例相互交换的计算方法;
第三章“衰分”,讲按等级分配物资或摊派税收的比例问题;
第四章“少广”,讲开平方、开立方的计算方法;
第五章“商功”,讲各种形状的体积的计算方法;
第六章“均输”,讲如何按人口、物价高低、路途远近等条件,以计算各地的赋税和分派工役等问题的计算方法;
第七章“盈不足”,即用假设的方法解决如下一类的问题:“今有(人)共买(物),(每)人出八(钱)盈余三(钱),(每)人出七(钱)不足四(钱),问人数、物价各几何?” 这类问题,在《九章算术》中已有完整的解法;
第八章“方程”,是关于联立一次方程组普遍解法的叙述;
第九章“勾股”,主要是应用勾股定理和直角三角形相似的各种比例关系,测量和计算“高、深、广、远”的问题。

“盈不足术”类似于现代“行列式解法”,它在欧洲至中世纪方以“双设法”的形式出现;欧洲直到16世纪时方得出类似一次联立方程组的普遍解法;

“方程”章中已引入了负数的概念,并已产生和运用了正、负数的加减法则,而印度到7世纪以后,欧洲到16世纪以后,才产生比较明确的负数概念。

古代世界中最精确的圆周率,这个就不多言了。

其他如:隋代刘焯创立的“等间距二次内插法”;唐代一行的“不等间距二次内插法”,王孝通的三次方程解法;宋元时期的解三次以上方程的方法,高阶等差级数求和、联立一次同余式等等,也都在世界上领先数百年之久。而在明代广泛使用的珠算盘,更是几百年来最先进的一种计算工具,至今仍有一定的生命力。

墨子在《墨经》中所提出的圆、直、点、线、面、体、平行等各种命题和概念,都可与欧几里得几何学的相关定理和命题媲美。

唐朝的《缉古算经》已经涉及到高次方程。

数学语言仅仅只是符号,全世界通用。但如果你指的是描述数学问题的语言,那汉语是世界上最先进的语言之一。


user avatar   william-james-66 网友的相关建议: 
      

任何一样产品,如果沒有人用,那么只可能是一个原因——

它不好用。

绝对不可能是其他的原因。什么垄断啊,什么用户懒惰啊,这些原因都是不存在的。

7-Zip也是如此。

至于什么「7-ZIP比winRAR在多个方面优秀」这种说法,只是7-Zip往自己脸上贴金而已。

举个栗子,这是我公司的一个文件夹:

我就不说正宗的7-zip软件了,那玩意儿跟winRAR根本沒法比。我说说最近比较火的bandizip,这个软件也支持7z格式。

用bandizip压缩一下,选择zip格式,耗时4秒。

换7z格式压缩,耗时20秒。

zip格式压缩包的大小是79.9M,7z格式压缩包的大小是76.9M。7z格式只比zip格式小3%,但是压缩耗时多了4倍。这种情况下,7z的优势何在?

当然,我们可以修改参数。我把压缩级別调成快速压缩,再用7z格式压缩一遍,结果如下:

耗时8秒,压缩後的文件大小变成了79.8M。

同样的文件,我用winRAR,标准压缩成rar文件,耗时也就是8秒。快速压缩成rar文件甚至能达到跟zip文件同样的4秒速度。

7z总是吹它的压缩率,其真正的原因是:它能吹的也就只有压缩率了。压缩率高3% ,或者高5%,代价是压缩解压速度慢一倍以上,这沒什么值得骄傲的。

下面是谷歌官方做的一个评测:

Deflate是zip使用的算法,Lzma是7z使用的算法。把Deflate:9和Lzma:1做比较:

7z的压缩率比zip高(3.847÷3.371-1)×100%=14%

zip的压缩速度比7z高(15.5÷10.2-1)×100%=52%

zip的解压缩速度比7z高(347.3÷70-1)×100%=396%

7z別说打败rar了,它连把zip按到地上摩擦都做不到。原文是这样说的:

表明了Zopfli,LZMA,LZHAM,和 bzip2在压缩和解压缩时占用CPU时间较长,不会直接代替deflate。

Lzma算法的速度是如此之慢,以至于很多人使用7z时都误以为自己的电脑中病毒了,因为它实在是太慢了。

看看这位,他下载了一个16GB大小的7z格式的压缩包花了10分钟,然後解压缩花了10个小时。

再来做个实验。

我们知道文字类的文件是最容易压缩的。我随便下了几篇网文,加起来一千多万字,分別压缩成zip、7z、rar格式做比较。其中zip和7z用的是好压5.9版,rar用的是WinRAR5.71版,全都采用默认配置。

好压压缩成zip格式耗时2秒,压缩速度14.4M/秒,压缩率39.9%。

好压压缩成7z格式耗时30秒,压缩速度1.2M/秒,压缩率25.6%。

WinRAR压缩成rar格式耗时4秒,压缩率26%。

三个文件的大小比较:

7z凭什么取代rar?


2019年9月26日更新:

本文的所有实验都是简单且可复现的。

上面我们已经以实验的方式说明了为什么不要使用7-Zip压缩的7z格式,下面我们继续以实验的方式说明为什么不要使用7-Zip压缩的zip格式。

这次我还是不用正宗的7-Zip,我用360压缩举例说明。

新建一个文档:

用360压缩制作成zip格式:

点「压缩包语言」,选择「繁体中文」,不出意料地乱码了:

可能有人知道这是因为zip格式不支持Unicode文件名。但是同一个文件,我用2345好压制作成zip格式,换成360压缩打开:

点「压缩包语言」,选择「繁体中文」,这次沒有乱码!

这说明,用2345好压制作的zip文件,跟用360压缩制作的zip文件,是不一样的,不会出现文件名乱码。

事实真相是:並不是zip格式不支持Unicode文件名,而是用7-Zip压缩制作的zip格式不支持Unicode文件名。请注意这其中的差別。

上面说的是360压缩,怎么又跑到7-Zip上面去了?这是因为国产的所有压缩软件,除了好压之外,全都是7-Zip加了个壳。所以7-Zip有的缺点,他们全都有

我刚试了下7-Zip目前最新的19.00版本,不出意外地发现它依然不支持Unicode文件名。而只要7-Zip不支持Unicode文件名,像360压缩这种7-Zip加壳软件也绝不可能支持Unicode文件名。

现阶段最好用的压缩软件还是好压和WinRAR。

为什么不推荐bandizip呢?因为我讨厌它的推广方式。比方说下面这个表:

这个表是假的。WinZip和WinRAR都支持Unicode文件名,都支持7z的分卷压缩文件,目前也都是免费软件,剩下的「快速拖曳」和「高速压缩」我不太清楚是什么,估计也不是什么重要的东西。总之这个软件的虚假宣传很严重。



2019年9月28日更新:

这种看法是错误的。

好压、WinRAR、WinZip、bandizip这四款压缩软件制作的zip文件彼此通用,也就是说他们都是标准zip格式。

这四款软件都使用Unicode文件名,把这四款软件制作的zip文件拿到韩国去,拿到日本去,拿到世界上任何一个地方去,都不会乱码。只有7-Zip以及360压缩这种7-Zip加壳软件才会有文件名乱码问题。

实际上,对于Zip格式来说,Unicode文件名是可选的。7-Zip选择不支持Unicode文件名是有它自己的想法,因为加入Unicode支持会导致压缩包变大,然後研發7-Zip的那帮人觉得压缩率更重要,所以他们不支持Unicode。

7-Zip官网说7-Zip创建的 zip 格式比大多数其它压缩软件创建的都小 2-10%。大家都用一样的zip格式,凭什么你就比我小?就是因为7-Zip放弃支持Unicode。

「Zip格式本身沒有定义Unicode文件名」,我还真不好说这句话是错的。实际上这句话的正确说法是「Zip格式本身沒有定义一定要用Unicode文件名」,zip格式可以使用Unicode,也可以不使用Unicode,选择权在压缩软件,WinZip和bandizip的Unicode支持就是可选的。

7-Zip不加入对Unicode的支持,把压缩包缩小2-10%,它只说後者不说前者,只说好事不说坏事,这就是宣传。


2019年9月28日更新:

评论区有人指出7-Zip支持Unicode,但是需要手动添加参数。我试了一下,是真的。看来7-Zip还是能用的,只是需要使用者拥有很强的专业知识,对普通用户不够友好。

评论区有人说7-Zip默认不支持Unicode是为了兼容老的程序。这裡我给大家看一段bandizip的帮助说明:

UTF-8是用于存储Unicode的标准字符编码方法,其被开发用于显示各种语言。
由于Unicode和UTF-8是在20世纪90年代之后开发的,因此ZIP格式的初始版本(在20世纪80年代制造)不支持UTF-8。 由于ZIP格式成为标准档案格式并且需要支持Unicode,因此,已经引入了几种方法来处理ZIP文件上的UTF-8字符串。
Bandizip支持其中两种;一种方法是将文件名转换为UTF-8,另一种方法是将额外的UTF-8文件名存储在额外的头字段中,同时将原始文件存储在MBCS中。
在Zip文件中使用Unicode文件名(UTF-8)
Bandizip将文件名存储在ZIP文件中,并将其转换为UTF-8。 它是由APPNOTE定义的标准文件名存储方法,但是一些压缩程序偶尔无法识别ZIP文件或错误处理它们将导致文件名损坏。
将Unicode文件名存储在Zip文件的额外头字段中(UTF-8)
Bandizip将附加UTF-8文件名存储在ZIP格式的额外头字段中,同时将原始文件存储在MBCS中。 此方法也由APPNOTE定义为“Info-ZIP Unicode Path Extra Field(ZIP信息U码路径额外字段)”。 因为它使用额外字段来存储UTF-8文件名,所以文件大小将比前者大几十字节。 但是,原始文件名存储在MBCS中,因此文件更安全,更兼容。
由于大多数压缩程序(如7zip,Winrar和Winzip)都支持此功能,因此可以防止文件名在使用不同系统语言的操作系统中被破坏。

Unicode filenames in ZIP format

简单点说就是zip支持Unicode有两种方式,第一种方式是直接把文件名从本地代码转换成UTF8存储在zip文件中,第二种方式是依然在zip文件中存储本地文件名代码,然後把本地文件名代码转换成UTF8存储在ZIP文件的额外头字段中。第一种方式有可能会出现兼容性问题,第二种方式因为存储的还是本地文件名代码,所以绝对不会出现兼容性问题,但是这样就相当于把文件名存了两次,所以文件会大一些。

大家猜猜,好压、WinRAR、WinZip,以及加了cu参数的7-Zip分別支持哪一种Unicode存储方式?

实测好压支持的是第一种。

上面我用好压制作了一个「新建文本文档.zip」,裡面内容就是一个名为「新建文本文档.txt」的空文档,我用notepad++打开是这个样子的:

一堆乱码,注意那个「金區板缓XXXXX.txt」其实就是「新建文本文档.txt」的乱码。

选择UTF8编码。

正确的文件名就出来了。

我再把这个名为「新建文本文档.txt」的空文档用WinRAR压缩成zip格式,用notepad++打开:

注意前面是正确的文件名「新建文本文档.txt」,後面是乱码。

选择UTF8编码。

前面变成乱码,後面显示正确的文件名「新建文本文档.txt」。

这个用WinRAR制作的文件比先前用好压制作的文件大了48个字节。

这就是第二种方式,实测WinZip用的也是这种方式。

至于7-Zip,它用的是跟好压一样的第一种方式。

我们理一下思路:

zip文件有三种方式,第一种支持Unicode兼容性一般,第二种支持Unicode兼容性好但体积最大,第三种不支持Unicode体积最小。

好压使用的是第一种方式,WinRAR和WinZip使用的是第二种方式。7-Zip默认第三种方式,加入cu参数後是第一种,不支持第二种。

实际上像WinRAR和WinZip这种国际性大公司才是最在乎兼容性的,自由软件开發者我感觉都不太在乎兼容性。


9月30日更新:

说说bandizip这个软件。

安装之後右键菜单会多出来一个「新建文件夹」选项。

然後是传说中的压缩包预览功能。

發现问题所在了吗?bandizip佔的位置太大了,好压和WinRAR都只佔了四五行,bandizip一个软件就佔了十几行,挤得右键菜单都显示不全了。

按道理说,如果我想知道压缩包裡有什么,直接双击打开不就可以了吗?所以我给压缩包预览功能的评价是负分。

还有那个自动解压功能。压缩包裡面有个A文件夹,A文件夹裡面有个B文件,换別的软件解压出来都是A文件夹裡面有个B文件,而bandizip解压出来直接就是B文件,我还得自己建个文件夹把B文件放进去。

总之,许多bandizip吹爆的特性,反而给我造成了困扰。而去掉这些特性,bandizip就不剩什么了。

而且我认为bandizip的界面很「简陋」,这裡说明一下,我所谓的「简陋」意思可能和別人不太一样。

来对比一下。这是bandizip的压缩界面:

这是好压的压缩界面:

bandizip只有一个压缩时间。好压则是压缩时间、压缩速度、压缩率、文件个数什么都有。这就是我所谓的「简陋」,即功能上的「简陋」。

再来看看好压的配置界面,可以自定义压缩算法、字典大小、单词大小。以这个配置压缩解压需要多少内存直接给你标出来。7-Zip也不过如此了吧。

还可以编辑过滤列表,对不同後缀名的文件采用不同的压缩配置。

这就是为什么我宁愿使用有广告的好压,也不用干净清洁小巧的bandizip。


2019年10月1日更新:

刚才测试了一下Win7自带的explorer.exe对zip文件的支持情况,结论如下。

explorer压缩zip文件不支持Unicode,但是可以打开Unicode文件名的zip文件,实测好压和WinRAR压缩的zip文件都可以打开。

explorer只支持deflate和deflate64两种压缩算法,不支持其他压缩算法。

2019年10月2日更新:

感觉好像歪楼了,题目问的是为什么RAR 比 7Z 更流行。我总结一下,7-Zip相比于RAR至少有三大缺点:

⒈界面简陋

⒉压缩耗时高,佔用内存多(在有的人眼中这是优势)

⒊稳定性差,压缩包容易损坏

第三点不是我说的,我给大家摘一段bandizip对7z格式的评价(链接):

为了实现更高的压缩比,7z使用了包括报头压缩在内的各种方式。
但是,由于这些功能,当压缩文件受到轻微损坏时,几乎不可能恢复它。
因此,在以7z格式备份重要文件时,请注意不要损坏它们。
您可以在7Z网站上找到有关如何恢复损坏的7Z文件的信息,但即使对专家来说,完成恢复也是极其困难的。

有人说这是商业软件的刻意抹黑,我给大家转一段开源界大佬对7z的评价(链接):

The [LZMA2 format] contains an unrestricted mix of LZMA packets and uncompressed data packets. Each packet starts with a header that is not protected by any check sequence in spite of containing the type and size of the following data. Therefore, every bit flip in a LZMA2 header causes either a framing error or a desynchronization of the decoder. In any case it is usually not possible to decode the remaining data in the block or even to know what failed. Compare this with [Deflate] which at least does protect the length field of its non-compressed blocks. (Deflate's compressed blocks do not have a length field).

这段文字是什么意思呢?我简单解释一下,LZMA2是7z的默认压缩算法,用这种算法压缩文件会产生这么一种情况:

假如一个普通文件内容是「ABCDEFG」,然後它第二个字节损坏了,我们看到的就是「A?CDEFG」。但如果这是一个使用了LZMA2算法的7z压缩包,我们看到的就是「A??????」。

Therefore, every bit flip in a LZMA2 header causes either a framing error or a desynchronization of the decoder. In any case it is usually not possible to decode the remaining data in the block or even to know what failed.翻译:因此,在LZMA2报头中的每个位翻转都会引起解码器的帧错误或者同步失调。在所有情况下,通常都不可能解码块中的剩余数据,甚至都不知道哪裡错了

最後,这位大佬给出的建议是:不要用LZMA2算法储存重要文件。

也就是说,如果你坚持使用7z格式,那么你就祈祷吧,祈祷压缩包裡一个字节错误都不要有。因为只要出现一个字节错误,整个压缩包就废了。

所以,即使不考虑时间因素,rar相比于7z仍然是有优势的。


2019年10月4日更新:

今天评论区还有人对我说:你说的不对,zip格式不支持Unicode。唉……

说个可能会违反大家常识的事:一般人可能会认为7-Zip这种免费软件靠的是口碑,WinRAR这种商业软件靠的是宣传。

错!

真实的情况是:WinRAR靠的是口碑,而7-Zip靠的是宣传

我印象中从来沒见过WinRAR做广告宣传过它自己。WinRAR崛起靠的是它良好的口碑带动人民群众用脚投它的票。

7-Zip並不是缺乏宣传推广,而是它的宣传推广已经过头了。过头到什么程度?明明是7-Zip自己的zip格式不支持Unicode,现在好多人以为全世界的zip格式都不支持Unicode。7-Zip的bug已经快变成feature了

我试过很多压缩软件,只有7-Zip的zip格式默认不支持Unicode。其他不支持Unicode的软件,我都能在他们的安装目录裡找到7z.dll,这些软件都是直接把7-Zip的东西拿过来用,都不带改的。

有人说什么国外都用7z,于是就有了这么一个有趣的问题:(为什么 Linux 要用 tar.gz,很少用 7Z 或 ZIP)?作为一个自由软件,7z连它的大本营linux都沒有搞定

还有人说什么国外注重版权,都不用rar。我给大家看一张英文维基百科的截图:

英文维基百科对rar的评价是:second in popularity to .zip files.人家对7z可沒有这么高的评价。

类似的还有bandizip,有人做宣传说bandizip支持Unicode,而WinZip和WinRAR都不支持?

我發现,像7-Zip和bandizip这种免费软件,其官网还是比较靠谱的,基本沒什么虚假宣传。但是其免费的特征,会招来一群人帮他们做免费宣传。然後这群人中的大部分啥都不懂,但是想象力很丰富,会自动脑补出一些並不存在的东西。比方说他们看到7-Zip宣传自己的7z格式支持Unicode,就会自动脑补成zip格式不支持Unicode;他们看到bandizip宣传自己的zip格式支持Unicode,就会自动脑补成別家的zip格式不支持Unicode。明明bandizip的大标题是「ZIP格式的Unicode文件名」,正文说的是「我们和WinZip、WinRAR一样都支持Unicode」,这些人连点进去看一眼正文的想法都沒有。

然後这些人对他们宣传的东西有一种谜之自信。有人说7z格式易损坏,马上就会有人跳出来说你有什么证据?沒有人会把自己的缺点放在官网上宣传,然後这群人的逻辑是:7z不说它有这个缺点,那么它就沒有这个缺点,你这样造谣污蔑肯定是收了钱的。

为什么我说7z易损坏的时候要引用那么多资料呢?因为我害怕被人喷。


10月6日更新:

我记得我已经把这个评论踩下去了。怎么又被顶上来了?

这个评论存在事实错误。因为我用的都是默认配置,7z的默认配置是16M字典大小:

WinRAR的默认配置是是32M字典大小:

居然还有43个赞,可见7z的虚假宣传多么严重了。

市场永不失效。——这是我学了经济学之後最大的收获。

一提起市场失效,大部分都会想到德沃夏克键盘和QWERTY键盘的故事。我学经济学之前也认为这是一个市场失效的典型案例。但是後来我知道了三点我以前不知道的东西:

⒈德沃夏克键盘是有专利的,每一个使用德沃夏克键盘的人都要给德沃夏克交专利费,而QWERTY键盘免费。

⒉所有德沃夏克键盘优于QWERTY键盘的实验,都是德沃夏克自己搞的,他是在推销自己的产品,所以其实验的真实性值得怀疑。

⒊德沃夏克键盘並不完美,比如说现代英语中I的使用频率远高于U,但是德沃夏克键盘把U放在了比I更顺手的位置上。

我觉得第一点就能把这个问题下的大多数人劝退了。

有人说什么WinRAR的流行靠的是盗版软件,装机的人都装WinRAR,用户沒有选择权。

问题来了:为什么装机的人都装WinRAR呢?还不是因为它好用!

这就好比说Windows为什么流行?因为国内电脑都预装盗版Windows,用户沒有选择权。

我才不会告诉你们当年我的笔记本电脑上预装的就是Linux,我回家第一件事就是把Linux格了,换个盗版Windows装上去。

如果装机的人选择7-Zip而不是WinRAR,最大的可能不是用户从WinRAR迁移到7-Zip,而是他这个电脑卖不出去了。

目前的现状是:Windows平台上最流行的压缩格式是zip,其次是rar(rar是第二流行的压缩格式这种观点是英文维基百科说的)。

Linux平台上最流行的压缩格式是tar.gz,其次是tar.bz2。

zip用的是deflate算法,tar.gz用的也是deflate算法,其实就相当于换了个後缀名。tar.bz2用的是bzip2算法,rar用的是私有压缩算法。

这三种压缩格式中,综合考虑压缩率、压缩时间、稳定性等等因素,rar是最好的,但是它收费,所以屈居老二,zip排第一,这很合理,很符合市场规律。

现在好多人吹捧7z的同时都要把zip踩一下,这真是令人无语的操作。很多人都不知道,其实zip也是开源格式。现在压缩界的龙头老大,是被一个开源格式牢牢掌控着的,这个格式就是zip。我平时压东西用的也是zip。

7z三大缺点,一丑二慢三不稳定。按理说第一个缺点是最不重要的,为什么人们常常提起的反而是第一个缺点呢?

这是因为「丑」这个缺点,是一眼就能够看见的,不容抵赖。後两个缺点不是长年累月地使用是不会發现的。

我以前也用7-Zip,7-Zip的zip格式默认不支持Unicode文件名这种坑点我是亲身实践發现的。像WinRAR这种商业软件,人人得而诛之,它一旦出现什么问题就会被人挑出来指着鼻子骂;而7-Zip这种免费软件,推销的人都会或多或少地美化它。WinRAR名面上有很多坑,但是我们知道它就只有这么多坑,而7-Zip看似完美的表象下你根本不知道它有多少坑。


2019年10月9日更新:

自v7.0开始,Bandizip会发布3种版本

标准版:为大众提供的免费的版本
专业版:为专业用户提供的付费版本
企业版:为企业用户提供的付费版本

自7.0开始,Bandizip将会在软件中加入广告,强制更新,並且不再提供离线安装包。希望广大Bandizip爱好者届时能继续支持这个软件,呵呵。


2019年11月3日更新:

有人说字典大小不同不能比较,那我来一个字典大小相同的比较实验:

zip用32K字典,rar和7z都用1M字典,使用的测试材料是中文小说,结论如下。

压缩耗时比:

zip标准:RAR标准:7z快速:7z标准=1:2.5:4.8:9

最终文件大小的比例是:

zip标准:RAR标准:7z快速:7z标准=120%:1:107%:93%

bandizip很鸡贼,他的「正常压缩」使用的是7-Zip「快速压缩」的参数,他的「最大压缩」使用的是7-Zip「标准压缩」的参数。所以使用bandizip压7z的时候,我们会發现他的压缩速度比较快,但是压缩比不高。


2021年10月10日更新:

「7-Zip 现在会为 UTF-8 编码的文件名写入额外的字段至 zip 压缩包中。

这可以让 zip 压缩包在不同系统中提取时能得到正确的文件名。」

7-Zip终于加入Unicode支持了,版本号是21.02 alpha,更新时间是2021年5月6日。

标准zip加入Unicode文件名的时间是2006年。时隔15年之後,7-zip终于支持这个标准了,真是不容易。

另外bandizip所谓的「高速压缩」实测是假的,宣传口径而已。




  

相关话题

  现代数学里有哪些本质的结论? 
  是否存在这样一个初等函数:它的三阶导数是其本身,而一、二阶导数不是其本身? 
  怎么用实数系的公理证明0与任何数相乘都等于零(求大佬指教)? 
  我想知道,掌握多种语言的人有什么困扰吗? 
  那些名字特别长而复杂的非洲土著为何有这样「奇特」的起名文化? 
  我家孩子现在上四年级了,数学特别好,但是语文学习就还没入门,我得怎么办呢? 
  「驿站」的「站」源于蒙古语吗? 
  运用五个感官词写一道你喜欢的菜。? 
  韩文为何被韩国人认为是最高级的文字? 
  如何判断下面这个级数的敛散性? 

前一个讨论
中学语文课本里有哪些课上不作重点但颇值得玩味的细节?
下一个讨论
为何后世文言文和先秦文章总是有些微妙的不同?





© 2024-05-09 - tinynew.org. All Rights Reserved.
© 2024-05-09 - tinynew.org. 保留所有权利