Ling Zhang Ling Zhang's Blog

最佳实践 - 从GB2312编码的WordPress博客系统升级到UTF-8编码

本人博客网站在今年7月从blogchina移植到了租赁虚拟主机上的WordPress(WP)系统。在文章搬家的过程中,由于blogchina采用了GB2312编码,当时为了省事儿,直接写了程序自动导到WP上并把WP的缺省编码从UTF-8改成GB2312以正常显示中文字符,现在看来这个决定并不聪明。原因有3:

  • 由于GB2312页面无法混合显示多语言文字,在世界都开始变平的情况下,未能与世界接轨;
  • 在非中文环境的操作系统中,如英文版Windows/Linux下,显示页面为乱码,而这些系统通常对Unicode字符都可以正常显示(需要相应字体);

于是下决心把目前采用GB2312的”遗留系统“升级到UTF-8,并保持原有帖子正常读取、显示。 中间尝试过的方法、走过的弯路不必细说,今天该升级工作顺利完整,全部用户数据转成UTF-8,前台的PHP显示也完美支持。具体方法如下:

1. 备份全部博客文章

备份是所有系统升级前的必经之路,WordPress的备份功能好在不仅可以备份数据,它能连通DDL一起都保存在一个文件中,直接运行该文件中的SQL语句就能重新建表并导入数据。备份前必须前激活WP的备份插件,见图1:


图1 激活WP备份插件

2. 文章备份
我3年多的帖子纯文字部分总共才1M多一点,用HTTP方式直接下载就可以了,下载后得到一个.gz的压缩包文件,内有.sql文件一个,见图2、3:

图2 保存备份文章

图3 压缩的文章备份

3. 解压缩.sql文件并转码

用支持编码转换的文本编辑器打开(我用的是UltraEdit),把该文件转换成UTF-8编码。在Ultraedit中的做法是选择File- >Conversions->ASCII to UTF-8 (Unicode Editing),另存为。中文字符从GB2312转到UTF-8,存储由2个字节变成3个,所以文件将有所增大,见图4的比较(转换后的文件大了近 200KB):

图4 转码前、后备份文件大小比较

4. 修改备份文件建表语句中使用的缺省编码

把SQL建表的default encoding,从"latin1"改成“utf8”,注意utf和8之间没有横杠。本人系统中共11张表,11个表定义全部修改替换,如图5:

图5 修改表定义缺省编码

至此,数据准备工作完成。

5. 删除老表

登录到WP的数据库管理Web界面(http://mysql.yourname.com),点击当前blog数据库显示属性,见图6:

图6 删除全部数据表

依次删除全部11张表(点击红叉)。

6. 更改数据库编码

把当前数据库缺省的非UTF-8编码修改成"utf8_general_ci",见图7:

图7 修改数据库编码方式

7. 执行修改后的SQL恢复数据
点击Web管理页面的"SQL" tab,从本地文本编辑器中copy整个备份文件并粘贴到SQL文本框内,点击Go执行SQL、导入数据。如果正确无误的话,会显示succesful。见图8:

图8 执行SQL重新建表恢复数据

8. 修改WP系统中的wp-db.php文件

在wp-db.php文件里,数据库建立连接的代码行后加入“mysql_query("SET NAMES utf8");”,这个重要环节的贡献源自此文。见图9:

图9 修改访问数据库的编码形式

9. 修改WP的缺省locale

OK,整个编码转换过程基本完成。重新登录系统(会发现表示乱码的"???"问号,不用管它),在"Options"->"Reading"选项中把原来的"GB2312"改成"UTF-8",保存、属性,所有???问号字符变成正常的中文字符。

10. 收尾

如果对WP的header,sidebar等theme文件做过定制,进入相应管理选项手工删除其中的乱码文字,重新输入。至此,采用GB2312编码的WordPress系统顺利升级成UTF-8。

</div>

Read more

电视直销卖软件

用电视直销方式来卖软件,国内我知道的只有橡果国际一家。如果电视机上能装反弹出广告窗口功能,橡果国际恐怕凶多吉少,可橡果国际偏偏就是能把网易拍,背背佳、好记星卖的大赚特赚。这很像国内的互联网市场,“白骨精”们用google搜索、MSN聊天,丝毫不能撼动百度、腾讯的大火特火。土归土,土中有乐,土中有新,土中亦有黄金屋。

说实话,我很佩服通过电视直销来卖软件,不是创新是什么?操盘手软件的广告极其通俗易懂,有旁白讲解,有显身说法,通篇没出现过一个软件专业词汇,谈论的只有一个词,一句话:赚钱,用软件赚钱。把需求还原给客户,这个广告做到了。

利用电视购物,可以为创智赢家节目组提供一个比赛选题:让两个队伍在东方CJ频道推销商品(衣食住行都成),在限定时间内销售金额最多者胜出。这个选题Apprentice在QVC上用过,很有意思。李大嘴的无烟锅、唐伯虎的含笑半步癫肩负着的娱乐大众的任务,终于能发扬光大了。

Read more

陪审团

一言不发的陪审团,又送走了一位玩家,今天的结果,袁鸣的那句话不知道对场上的陪审团起了多大的影响。这个结果多少让部分观众继续相信东方卫视和其他国内上星台一样,根儿上还是个地方台。

曾经看过一部美国电影,名字忘掉了,整部电影场景都发生在法庭的一间会议室里,陪审团成员坐在一起讨论案情、回忆、争辩、攻击,最终发现了案情疑点。陪审团显然不是完美的制度(只要有人存在,完美就不存在),大多数人还是认同陪审团制度的合理性。

接受事实吧, 创智赢家接过辛普森案的接力棒,继续着对国人民主制度的启蒙教育。

Read more

百度博客搬家服务

百度开出博客搬家服务,我一点不觉得奇怪,倒是它提供的无需密码验证的“搬家”让我觉得很新奇。

在我写了blogChina搬家到WordPress攻略不久,就收到百度工程师的邮件讨论博客搬家的话题。现在看来百度提供的对MSN Space和新浪博客搬家手段可能是完全基于HTML的extract和parsing,而不是blogger API(写入到百度自己的博客系统可以用blogger API或者直接写DB),这就能解释它不仅支持搬自己的家,连别人的家一样搬。来自百度空间的说明基本能证实这一猜测:

在搬家过程中有可能会有部分文章、评论丢失、文章格式发生变化。如有少部分文章丢失、格式变化,您可手工将其搬入空间内进行调整

百度的crawler这么强,到网上搬点东西实在易如反掌。我猜百度内部应该有一个generic的Web crawler和多份customized crawlers,各个instance独立运行。博客搬家crawler跑到MSN,Sina上下载页面,抽取页面,扔掉所有外部链接,用广度优先的方法递归爬行,然后导数据。搜索引擎就是这样用别人的数据给自己赚钱,当然前提是提供了内容增值(数据可访问性),不好说这样以披着搜索引擎的外衣拷贝博客文章到自家的做法外人有没有想法,不过过去的众多经验表明粘着点原罪的第一枪往往会成为成功的催化剂。

Read more

On-line transaction? forget Firefox.

虽然我自己是Firefox的忠实用户,但是如果要在网上进行交易、支付、财务相关业务时,尤其是基于目前国内网站对Firefox的支持水平,还是得老老实实回到IE,少给自己找麻烦。自打我在Chinapay上吃过苦头后,这个弦就一直绷的很紧,特别是各个银行的网银业务,基本是Firefox的禁区。

即使是IBM,已经基本实现了内部主要Web应用对Firefox的支持,偶尔也会出点兼容性的小毛病。比如出差申请系统,如果用Firefox填表,生成表单的ID号就是空的,除非换成IE。

今天在家里做了三笔网上交易,也都是用的IE:去上海移动网站把今年的2000分积分兑换成50块话费;在网上订阅了2007年度的程序员IT时代周刊。 这两本杂志在浦东的报亭里不太容易买得到,如果漏买了的话我一般去来福士对面福州路、西藏路口或者吴江路、南京西路地铁口旁边的两家大报亭补买。

这是dW上介绍从IE到Firefox移植的经验和技巧如何兼容两种浏览器的文章,希望更多的公共事业、金融服务网站能够更好的兼容新兴浏览器。

</p>

Read more

vertical->horizontal

Tom Friedman在IBM townhall meeting上的手势让人记忆犹新:世界正从vertical走向horizontal。

从垂直到水平的转变,还发生在处理器身上。《程序员》第11期的译文“The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software” ,讲了同样的事情。这篇有关处理器发展的文章传达的核心思想是:由于电气物理特性的限制,无限制提高CPU主频进而提高软件执行效率的时代已经一去不复返了;未来提高处理器性能的方式将是多核;CPU处理能力的扩展由纵向增长转变为横向扩张。对于软件开发者来说,简单依靠升级CPU方式提高性能(免费午餐)已经结束,如果在软件开发上不考虑多处理器、多线程、并发的话,你的软件运行速度将在未来的计算机硬件升级的道路上原地踏步。

ecosystem,这无疑会是处理器厂商们的法宝:必须打造一个大环境,围绕在多核CPU周围,从OS, 编译器优化, 平台软件优化, 应用开发工具包等等都需要提供完整的支持(自己做;第三方做;自己和第三方一起做),否则高难度的、支持并行处理软件开发的高门槛终将被CPU厂商的低出货率所吸收。

先修地铁再造房,轨道交通与房地产开发的和谐发展,应用在上述领域的原厂商身上可能表现为软硬结合、新业务、新部门的出现,并可以用来解释一些看起有点蹊跷的新产品线和新的战略部署。

程序员们要辛苦了。

Read more

Evolution of JBuilder

1997年3月,JBuilder 1.0;

1998年4月,Jbuilder 2.0;

...

2006年11月,JBuilder 2007.

颠峰时刻的JBuilder,曾经每半年发布一个新版本,搞的群众意见很大。在经历了这两年在两条IDE战线上的失利、调整和重组,这次Borland CodeGear在Eclipse IDE上的发挥,很值得关注。虽然无论它到底表现如何我都会继续使用Rational IDE,在开源平台上的创新和Borland这个让人尊敬的对手都会让这场比赛变得更好看。

</p>

Read more

Programmable gaming console

作为本周抢购风潮中把无数人挤的人仰马翻的主角 - 索尼PS3游戏机,携带了由索尼,东芝和IBM共同开发的CELL处理器。虽说纵观目前游戏机市场的CPU份额,IBM以100%占有率暂时无人能及,可要更好的普及多核的CELL处理器,为游戏开发商(也包括其他基于CELL的应用)提供高效便捷的运行库迫在眉睫。

在本周《三联周刊》特别报道中回顾了当年阻碍世嘉土星销售的原因之一是采用了双CPU的土星,软件开发很困难,导致游戏开发商拒绝跟入。

在中国,IBM开发中心和IBM研究院,新成立了相关开发部门从事CELL库的开发工作,并将与国内高校一起合作。此前,在alphaWorks和dW上已经公布了CELL Brandband Engine的开发工具和相关入门文章

Read more

第二条命

IBM刚刚公布的10项创新计划中,其中一个是"3D互联网“。在昨天下午的员工大会上,首席执行官Sam利用3D技术和主管创新与科技的副总裁Irving进行了虚拟对话,而这个平台正是Linden Lab的Second Life

第一次听说Second Life是不久前在一本杂志上,文章作者代表此杂志进驻SL;第二次是在昨天下午的IBM townhall meeting;第三次是今天早上在IBM dogear social bookmark里;第四次是在今天晚上Irving的博客里。到处都是Second Life,逃也逃不掉。

在去SL注册前,我阅读了wikipedia上有关SL的描述,对理解这个虚拟社区很有帮助。而虚拟世界里的”L币“,一种可以和美元互换的虚拟货币,让人联想到咱们腾讯的Q币,还有它不久前惹上的那堆麻烦。

由于免费用户只能选择名,不能选择姓,于是选用了"Ling Iceberg"做用户名。登录后,除了可以四处行走外,SL里的居民还可以像鸟一样自由飞行(下班后在地铁公交里闭眼急车的人,忍忍吧,回家就能飞了。)

如果用关键词”IBM“搜索,能找到不少先期抵达的来自IBM的居民,里面还有我们的CEO :-)

有部电影叫《The Thirteenth Floor》,说的是在玩虚拟游戏的人发现自己原来也是在虚拟世界里被操作的木偶 (嵌套式虚拟空间),就是咱们庄周梦碟的外国翻版。如果能在SL中下载SL客户端,创建ID,进入SL的SL,该会是什么样有趣的场景。

Read more

本周大事

Sun open source Java under GPL v2 license (openJDK)是本周一最重要的事情。我阅读了Sun自己有关此事件的几乎所有报道,包括这份“来自世界各地的声音”(里面包括中科院和中国开源联盟的表态),仔细看了TSS, Javabobby等处的群众留言。IBM也在当日发表了一个相对平静的声明,阐述了自己的态度。至于Open source Java与Harmony的关系及影响,可以参考杨普的博客文章。这块石头入水的效力,或许在未来半年后开始显现。

周二,就是今天,IBM中国召开全体员工大会,IBM CEO Sam Palmisano在北京亲临现场。特邀嘉宾,The World is Flat的作者Tom Friedman的精彩演讲,让人折服。我想所有听了他演讲的人都记住了这句话:"What could be done, will be done. The last question: is it by you or to you?"

</div>

Read more