Python 3.0以下诡异的中文编码问题

长话短说,问题的由来是使用beautifuSoup时,提取出来有一段中文,但是大部分内容在默认的编码方式下能正常显示,但总有那么一次的内容显示为乱码。

分析原因后发现是u’’和’’的差别,大部分内容显示正常是因为返回的内容是’’的方式,其类型为str,而显示乱码情况下,则以u’’的方式返回的内容,其类型为unicode。说到底就是返回的内容是一样的,但是乱码时候这段内容是被unicode处理过了。怎么办呢?

纠结了好久,发现不是encode与decode能解决这个问题的,已经是一个底层编码方式的问题了,甚至想到是否把编码的原理搞明白透彻了,用数学计算的方式来实现错误编码到正常显示的纠正。后来,发现了一对好用的函数,repr与eval,在python中,对这两个函数的说明是:

In [23]: help(repr)
Help on built-in function repr in module __builtin__:

repr(…)
    repr(object) -> string

    Return the canonical string representation of the object.
    For most object types, eval(repr(object)) == object.

所以想到用字符串处理的方式来解决这个问题,比如一个“我”字的GBK编码是’\xce\xd2’,str类型,而返回的内容是u’\xce\xd2’,unicode类型,先用repr处理u’\xce\xd2’,得到一个u’\xce\xd2’的str的类型,直接字符串截取就可得到’\xce\xd2’,且是str类型,然后使用eval函数便变回到需要的类型及内容,即解决了内容乱码的问题。

收藏与分享

我的抱怨如同这天气般凄冷

下午的时候,意外的收到了辅导员的信息,本科阶段还差一个学分,将来毕业会拿不到学位。一下子把简单的心情拉到了寒冷的深谷,立即上网查看自己的成绩,和以前没什么差别啊,有一门课程设计显示的是旷考,但这是因为我选做了另外一个课程设计,二选一,一个就行了,然后打电话给自己的同学,因为这个课程设计是两人协同合作完成的,结果他说自己是有成绩的,这下我也不知道自己的问题在哪里了。于是打了电话到教务科去,说清楚了一切的缘由,老师让明天下午去一趟教务科,这算是有了个结尾的方式了吧,明天能理清这个问题了吧!

收藏与分享

ubuntu 10.04下的gnome桌面动态壁纸的设置

每天晚餐之后的一段时间里,自己总会觉得精神不好,于是喜欢找了点事来打发时间,今天解决的问题是ubuntu桌面的动态壁纸,系统默认的存放壁纸的路径是/usr/share/backgrounds ,可以把自己喜欢的图片集放到一个文件夹里,比如wallpapers,完成图片文件的操作之后,就要做一些配置文件的设置了,ubuntu的壁纸采用的是xml文件的进行管理,比如打开一个xml的文件,有<background></background>,中间嵌套有<starttime></starttime>用于设置壁纸生效的时间、<static></static>表示一幅静态图片停留的时间及<transiton></transition>表示两幅图片之间的切换过程是怎么样的。

说完了xml文件的结构,然后就是如何得到一个可以包含自己喜欢的壁纸的xml配置文件,如果你的壁纸很多,用手工添加的方式就显得没效率了。现在,这正是我要解决的问题,于是用C语言简单的写了个生成配置文件的程序makebackground,它需要一个输入参数input,是一个存放壁纸图片索引的文件。如何得到这个文件呢,可以用find命令,比如你的壁纸放在/usr/share/backgrounds/space文件夹下,则可以用 find /usr/share/backgrounds/space -name “*.jpg” > ./sources.list 得到sources.list的文件,接着用这个简单的程序 ./makebackground ./sources.list 就会在当前目录下生成一个blackgroundlist.xml的文件。最后就是用鼠标操作的时候了,在更改桌面背景->背景里,添加你的xml文件,然后就可以看到你的壁纸效果了,慢慢的欣赏。虽然比win7复杂了点,但个性化的定制是很强的,如果想要哪张显示的时间长些,就自己调整static的参数。另外补充,在http://hust_netstat.download.csdn.net/可以找到相关的程序与代码。

收藏与分享

发布一个自己写的gvim的配置脚本

以下为一个vim脚本的内容,其中实现了ctags与cscope的所有功能。

haozhi_default.vim

自己用的是gvim7.3版,使用的插件相当的多,如下所示列表:

a.vim                 用于在.h与.c或者.cpp之间切换
acp.vim            与自动补全相关
asmx86.vim   用gvim写汇编时,可以在这里找到有关的语法与颜色标记
c.vim                与C语言有关的插件 继续阅读
收藏与分享