所谓“CSV”,是Comma Separated Value(逗号分隔值)的英文缩写,通常都是纯文本文件。 下面是一个实际CSV文件中的部分内容,让大家对他有一个感性的认识。我们选的是Sjojo_Rescan 的CSV文件(Sjojo是ASW-亚洲扫图风的成员之一)。
sj_mino1001.jpg,715282,4FB55FE8,
sj_mino1002.jpg,471289,93203C5C,
sj_mino1003.jpg,451929,C4E80467,
通常CSV文件开头是不留空的,以行为单位,每行中记录一张图片的了多项数据,每项数据用逗号 来分隔(标准英文逗号)。一般说来集图用的.CSV文件的格式是这样的:
文件名,文件大小(以字节为单位),CRC校验值,注释(可省略)
sj_mino1001.jpg,715282,4FB55FE8,
文件名 文件大小 CRC值 注释(已省略)
如果你的机器上装了Microsoft Excel的话,.csv文件默认是被Excel打开的。需要注意的是,当你 双击一个.CSV文件,Excel打开它以后即使不做任何的修改,在关闭的时候Excel往往会提示是否要 改成正确的文件格式,这个时候千万记得要选择“否”。因为Excel认为.CSV 文件中的数字是要用 科学记数法来表示的,而我们要的.CSV文件中的数字是普通的。如果你选择了“是”的话,Excel
会把CSV文件中所有的数字用科学计数来表示(2.54932E+5这种形式),这个文件就没法用了。 所 以如果你的CSV文件绝大部分都是用在集图上的话,建议把.CSV的默认打开方式改成任意一个文本 编辑器,系统自带的记事本就是个不错的选择。
好,让我们回到CSV文件的格式中来。见上面,从左到右 sj_mino1001.jpg是文件名,715282 是以字节表示的文件大小。当文件名中包含逗号的时候,由于逗号在CSV文件中特殊的作用,为了 不至于产生歧义,需要用引号把文件名括起来。比如 "The Art, Fantasy.jpg",384211,...,.... 接着是一个8位的16进制数字 4FB55FE8,这是文件的CRC32校验值。整个CSV文件的精髓都在这里。
让我们举个小例子来说明它的意义:Sjojo发布了一张图sj_mino1001.jpg,假设你是从朋友手中拿 到这张图的,那么你肯定常常会有这样的疑问,这张图在传播的过程中是否被改动过呢?是否无意 中遭到了损坏呢?CRC就是为解决这个问题而存在的。一般情况下,扫图家每发布了一套图,就同 时放出一个CSV文件(这种CSV通常叫做Official CSV,也就是官方发布的CSV的意思),这个CSV中 的CRC值是用专门的软件通过CRC32算法(常用的CRC算法还有CRC16)对文件运算后生成的一个值, 这个值可用作文件真身的标志。在绝大多数情况下,如果这个文件在传播过程中无论是大小还是内 容被改动过。那么,用同样的CRC32算法再对文件进行运算后产生的CRC校验值就完全不一样了。如 果得出的CRC值是一样的,则完全有理由认为这个文件是真身,没有被改动过。还有些时候,收来 的图片文件名被改动过了,那么你怎么知道谁是谁呢?这个时候CRC值又起作用了:用专用的软件对图片处理后,可以得到文件的大小和CRC值,然后根据大小和CRC值在CSV中寻找是否有适合的图片。如果有,就会把图片的名字改成CSV里的。举个例子,你收到了一张图片,名字是pic0001.jpg,同时你知道这张图片是Sjojo_Rescan这个集子里面的,但是不知道具体是哪一张。用软件得到它的大小和CRC分别是715282和4FB55FE8,那么软件在CSV文件里找到一行sj_mino1001.jpg,715282,4FB55FE8,大小和CRC都符合,软件就认为这张图片的原名是sj_mino1001.jpg,接着自动把文件的名字改成sj_mino1001.jpg。改动的不是CSV文件而是图片的文件名。接下来的是注释和说明,可以省略掉。需要注意的是注释的后面是没有逗号的,如果要省略注释的话,一定要在CRC值的后面保留一个逗号,否则软件会把CRC值认为是注释的。