批量修改Linux下文件名导出到Windows上乱码问题

Posted by & filed under Operating System.

博客大巴最近正在进行盛大的摄影展相片征集活动,主题是大同·视界,在北京、上海等大城市的几万辆出租车、公交车、地铁上投放了广告,规模可谓空前,十天内通过审核的照片多达数G,我受命将这些照片导出供评委评审,因为时间关系,等到以后一起审核肯定是来不及的。 规则很简单,数据中的某张表上记录着关于各个作品组的信息,因为摄影展图片是按组来存放的,就是说数据库中某张表(假定表明叫photo)的某个字段(假定名称叫做pics)存放着一组相片的名称(两个图片名称以特定分隔符分割,我们假定为英文状态的逗号),现在要做的就是:导出数据库中所有通过审核的图片(表中字段state为1),然后按用户“昵称_作品名称_作品序号_作品ID_文件名”来重命名。 这个代码很简单,如下:   而这样会导致一个问题,就是导出的文件名在中文版Windows系统是乱码的,因为Linux系统的文件名默认编码是UTF-8的,而中文版Windows系统的编码是GBK的,我之所以强调中文版Windows是因为英文的Windows是ISO编码的,如果需要,可以对照着我后面的代码批量修改文件名,只是改一下转换的目标编码即可。 如果你是在服务器上执行这段代码的,当然是最好不过的,而且推荐用命令行去执行,因为如果你的文件过多,apache可能会超时,导致部分文件的文件名没有转换完成。、 转换编码的脚本如下: ‘; } //copy($utf_name, $file_array[$i]); } } } } } filesInDir("image");   ?> 怎么样?很简单吧?确实很简单,以上共同的假设就是:你的文件名中有中文,如果没有中文或者类似中文的文字,比如日文等,也就无所谓乱码的问题了,这些各种各样的编码都是洋鬼子弄出来的,而且也因为英文是当今世界最强势的语言,当然兼容英文字母,即使是GBK这样的国标码。 BTW:以上我主要是想介绍一下大批量文件名乱码的补救方法,其实如果有可能,这种事情完全可以避免,因为你在输出数据库内容的时候就可以完全可以控制输出的字符编码,当然,在Linux下看是乱码,导出到Windows上就正常了。 如果你已经将UTF-8的文件打包下载到本地才发现文件名乱码,那么你需要一个Linux操作系统,并且装了PHP,因为你在Windows上无法解压这个压缩包,解压过程中会出现错误提示,因为Windows认为这些乱码是非法字符,不能作为文件名 以上方法,纯属个人经验,不对之处欢迎拍砖

Top 10 Concepts That Every Software Engineer Should Know

Posted by & filed under Study & Reading.

he future of software development is about good craftsmen. With infrastructure like Amazon Web Services and an abundance of basic libraries, it no longer takes a village to build a good piece of software. These days, a couple of engineers who know what they are doing can deliver complete systems. In this post, we discuss… Read more »

Sql Server Transactions

Posted by & filed under Programming.

Before you can begin a transaction, you must first open the connection. You begin your transaction and then assign any newly created command objects to that transaction and perform queries as necessary. Commit the transaction. If an error occurs, Rollback the transaction in a catch statement to void out any changes and then rethrow the… Read more »

ADO.net 2.0 Transaction (事务处理)

Posted by & filed under Programming.

在谈具体实现前 先介绍一下三种事务: 1. 单对象单资源 2. 多对象单资源 3. 多对象多资源(分布式事务, 使用两段提交协议) 在ADO.Net1.0下有两种使用Transaction的方法. 一种是在需要事务的对象中显式的调用事务处理, 还有一种是使用Enterprise Service的声明式的方法. 第一种方法的示例代码如下: public void TransactionTest() { string connectionString = ""; IDbConnection connection = new SqlConnection(connectionString); connection.Open(); IDbCommand command = new SqlCommand(); command.Connection = connection; IDbTransaction transaction; transaction = connection.BeginTransaction(); //Enlisting database command.Transaction = transaction; try { /**//* Interact with database here, then commit… Read more »