Life Since 1985

Happy Hacking

linux下乱码的解决

本来是想解决一下FLASH乱码的我问题,但是通过这种方法可以解决绝大多数的在linux系统下产生的乱码问题。其实这个方法就是将默认的字体删除,让linux使用不会产生问题的中文字体。这个问题用一下两条命令就能解决。

sudo cp /etc/fonts/conf.d/49-sansserif.conf /etc/fonts/conf.d/49-sansserif.conf.bak

这一条是进行备份,如果执行第二条命令后并没有解决乱码问题可以通过将文件名去掉.bak来还原。

sudo rm /etc/fonts/conf.d/49-sansserif.conf

这条命令是删除这个字体。

执行完后然后刷新网页,一般都会解决乱码的问题。

PS:不是原创,从google大神中找到的,不过命令下的注释使我写的,希望会对大家有所帮助。这个方法不是仅仅如原文所说只能解决flash乱码的问题,因为改变的不仅仅是flash中的字体,改变的是os的字体。所以经过我的测试对于pdf产生的乱码也能够很好的解决。

ps:很惊奇这个方法的通用性,在刚刚接触linux的时候就是使用这种方法,到了现在依然可以用。

115诡异的乱码

今天下载115网盘的资源,文件名一堆乱码,以前就出现过这种状况。其实也不是乱码,仔细看了一下应该是用%分隔的unicode码。反正也是闲的没事自己就用python写了一个恢复正常文件名的小程序,还算比较简单,主要就是读取文件名,然后将文件名按照%分隔,再手动设置一个溢出判断,超出两个字符就算溢出,溢出的部分和在文件名中的位置偏移另存,然后转换为字符就行了,最后将转换完的文件名存储。

python确实比较方便啊,不过十几二十行的代码而已,要是这个程序用c 或者java写的话……

# -*- coding:gb2312 -*-
F = open('datafile')
s = F.readlines()
s = [c.rstrip() for c in s]
ls = [c.split('%') for c in s]
result  = []
for c in ls:
    del c[0]
    isLarge = False
    sTag = None
    nTag = None
    n = -1
    for i in c:
        n = n + 1
        if len(i) > 2:
            isLarge = True
            sTag = i[2:]
            c[n] = i[:2]
            nTag = n + 1
            #print sTag
            #print nTag
    c = ['0x' + p for p in c]
    c = [eval(p) for p in c]
    c = [chr(p) for p in c]
    if isLarge == True:
        c.insert(nTag, sTag)
    result.append(''.join(c) + '\n')
    #print c

F.close()
F = open('myfile', 'w')
F.writelines(result)
'''
for i in result:
    print i
'''