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 '''