搞定编码!

辛苦了两三天,终于把编码做完了。可惜在csdn上发了一篇文章,白瞎了40分的积分,赶紧申请一个帐号把分数结果来:)

其实说起来并不困难。wordpress中先将web页上的信息以utf-8的编码方式存入mysql数据库;之后我的客户端发查询请求。mysql返回的格式还是utf-8 的编码。关键在于如何将其返回为utf-8 的字符串。

由于MySQLDataReader (更普遍的说,SQLDataReader也是这样)中获得字符串的方式是:MySQLDataReader.GetString(int i)。但是系统默认的编码是gb2312。这样获得的字符串当然是乱码。即使后来我再使用
Encoding.UTF8.GetString( Encoding.GetEncoding(“gb2312”).GetBytes(Content));
也会出现少数“?”这样不能显示的字符。

所以最好的方法是在没有变成字符串之前就用utf-8的编码生成字符串。我想了一想,一共有两个方法:

  • 修改系统默认编码的

这种方法貌似可以,其实不然。因为Encoding.Default是只读的属性,不能被修改的。

  • 获得原始对象,在进行转化

正在郁闷中,突然发现一个MySQLDataReader.GetValue(int i)的方法。返回的是一个object,就是它了!

我的解决方法是用了下面的语句:
this.Content=Encoding.UTF8.GetString((byte[])DBReader.GetValue(2));

一切正常了……

Window下的blog

这两天我一直在写一个能看我的blog的windows客户端。
由于以前的blog是自己写的,xml格式,所以只需要下载到本地,然后解析即可。但是现在的blog就比较的麻烦了,我用了一个wordpress的工具,它需要连接mysql数据库。数据导入导出都比较麻烦,而且访问数据库的时候还需要使用数据库驱动:MysqlDriverCS。郁闷的是18的mysql为了与学院主页兼容,所以使用的是4.0低版本的mysql,而这个版本无法支持unicode编码。所以我又把数据库转到了19,重新架了一个4.1的mysql。这些终于可以了。但还是需要搞定编码的问题,加油!