python下非常规utf8编码处理

最近在和微博页面打交道,发现微博返回的页面数据多数都是内嵌在javascript下的,而带来的后果就是其中的中文字符是json编码后的utf8编码。
而在python程序中获取页面后得到的结果大致有这样的字符:
"\u003Cp\u003E"
在python中这样可以直接打印出来:
print u"\u003Cp\u003E"
但作为一个变量,不能这样简单处理,需要进行编码转换:
str="\u003Cp\u003E"
print str.decode('unicode-escape')

wordpress mu 1.3中的编码问题

发现wordpress mu 升级到1.3版本了,对应到wordpress 2.3系列。其中,显著的功能就是默认的TAG支持了。但是升级后发现中文乱码,这时因为我的mysql数据库目前默认的编码还是utf8,而wordpress mu目前默认的编码是采用utf8了,因此需要进行修改。

有两种办法处理:
1、修改wordpress mu的代码
找到wp-inlcudes/wp-db.php文件,注释掉这两行:

// if ( !empty($this->charset) && version_compare(mysql_get_server_info(), '4.1.0', '>=') )
// $this->query("SET NAMES '$this->charset'");

2、修改数据库编码,使其和你的wordpress编码相对应
比如,可以修改数据库的编码为utf8。
首先导出:

mysqldump --default-character-set=utf8 -uroot yourdb > yourdb.sql

然后修改此文件,替换所有的utf8为utf8,并在文件头添加:

SET NAMES utf8;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;

然后保存为yourdb-utf.sql,在进行数据库的导入工作:

mysql -uroot
mysql>drop database yourdb
mysql >create database yourdb
mysql -uroot yourdb

此处的转换方法参考:转换论坛:webwiz 7.9 -> phpBB3

我为了以后升级的方便,选择了第二种方法进行处理。

imap_utf8()中转换GBK编码的问题

服务器环境:ubunt feisty,php5.1.2,php5-imap 5.1.2-1ubuntu1

imap_utf8()不能转换GBK编码的汉字,GB2312没有问题
但可以使用iconv_mime_decode($string,0,”UTF-8″)来进行代替

参考: https://bugs.launchpad.net/ubuntu/+source/php5/+bug/137475

BUG重现:
nano test.php

执行:
php5 test.php

trac安装及配置使用多仓库

安装比较简单:

sudo aptitude install trac libapache2-mod-python

然后就是配置工作。

默认情况下,trac只能支持单一仓库。
若想支持多仓库,必须使用mod-python支持。
然后在配置站点的时候,使用TracEnvParentDir关键字。
如下:


SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonOption TracEnvParentDir /var/trac
PythonOption TracUriRoot /projects

其中,/var/trac目录下就是预先定义的initenv目录。
sudo trac-admin /var/trac/project1 initenv
然后每个project都使用类似的操作。
注意,然后还要修改每个对应的trac.ini文件以满足自己的需求。
比如,中文utf8支持就要修改default_charset为utf8。

转换论坛:webwiz 7.9 -> phpBB3

webwiz是一个基于ASP的论坛,由于此官方论坛已经停止维护,官方网站很长时间无法登录了,由于ASP的先天缺陷,而且正好PHPBB3也已经到RC1了,就决定把这个论坛进行转换。

1、实际情况
我们使用的WEBWIZ 7.9使用的是ACCESS数据库,并且在使用过程中有一定的修改,但我不清楚有哪些修改,因此,你的转换若有问题,也请反馈你的实际情况。
头像有三种,一种是系统提供的,在avatars目录下,另一种是用户上传的头像,放在uploads目录下,还有一种是HTTP连接,就是放在另外网站上的头像。
WEBWIZ的附件是直接存放在uploads目录下,但数据库里没有任何相关信息。
WEBWIZ的密码是采用了HASHEncode+Salt的加密算法,和SHA1类似,但不同。

2、转换程序
phpBB3只提供了从phpbb2的升级程序,在phpbb的官方论坛上搜索到了一个从webwiz到phpbb2的转换程序,但其转换的内容不完整,因此就决定自己写一个。而且PHPBB3现在已经采用了UTF8编码,要求数据库也要采用UTF8编码,MYSQL 4.1之后的程序也提供了UTF8编码。
首先需要转换ACCESS数据库到MYSQL,我前面有介绍过如何进行转换
我是使用了knoda进行数据转换的,在ubuntu系统下,注意,转换好后,数据库是默认为UTF8编码的。
转换完后,导出mysql数据。

mysqldump --default-character-set=utf8 -uroot yourdb > yourdb.sql

要修改此SQL文件,使之成为UTF8编码。替换所有的utf8为utf8,并在文件的开始添加:

SET NAMES utf8;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;

然后转移到测试服务器上,并进行相应的导入工作。

在http://www.phpbb.com下载最新的phpbb3,根据安装提示,安装一个默认的空白的PHPBB3系统,假如你的数据库是phpbb。
并把webwiz论坛的所有文件拷贝到同一个服务器上,二者目录可以在一个层次。
如:

/var/www/phpbb
/var/www/webwiz

然后把我提供的转换程序拷贝到phpbb/install/convertors目录下,即convert_webwiz.php和functions_webwiz.php文件。
同时修改phpbb/includes/auth/auth_db.php文件,若你想让你的用户重新申请密码的话,也可以不修改这个文件。

// Check password ...
// added for webwiz conversion
// HashEncode is webwiz function.
global $phpbb_root_path, $phpEx;
require($phpbb_root_path . 'includes/functions-webwiz-hash.' . $phpEx);
if (!$row['user_pass_convert'] && (md5($password) == $row['user_password']
or HashEncode($password.$row['salt'])==$row['user_password']))
{
if (md5($password)!=$row['user_password'])
{
// Unconverted password
$sql = 'UPDATE ' . USERS_TABLE . '
SET user_password = "'.md5($password).'"
WHERE user_id = ' . $row['user_id'];
$db->sql_query($sql);
}

if ($row['user_login_attempts'] != 0)

这个前面的$sql语句中要添加一个字段:salt。

若修改了此文件,还要拷贝functions-webwiz-hash.php到phpbb/includes/目录下。
然后就可以在PHPBB的安装界面那儿进行系统的转换了。

下载:webwiz 7.9 converter

vb & phpbb

因为论坛要增加一个新版面,但是有问题,后来联系服务商才处理好。

在处理中,自己在本地机器上又搭起了apache2/php5/mysql5,下载了vb3.5,进行了简单的测试,感觉不错,好像vb要开始支持utf8了。

但从原来的gb2312转换到utf8好像还有一定的麻烦:
1、备份sql文件,好像有几个表要单独处理,如附件、头像等。
2、编码转换,iconv

不过,还是期待phpbb 3.0,vb的版本就不升级了。(不知道年底能否出来正式版,呵呵)

文件名编码的转换工具:convmv

gnome的默认编码是UTF8,而很多FTP(特别是WIN下的)的编码是GBK,因此down下来后基本上中文都是乱码,原来一直都是手工改(好土啊),今天才知道LINUX自带了一个工具:convmv。若没有安装,可以直接apt-get install convmv。
比如,
convmv -f zh_CN.GB2312 -t UTF-8 -r --notest *
这个意思就是从GB2312转换到UTF8编码。