敏感词过滤代码:
# -*-coding:utf-8-*- import sys class senseWord(): def __init__(self,fileName): """ :type fileName: 敏感词文档 """ self.list = [] print sys.stdin.encoding with open(fileName,'r') as f: for line in f.readlines(): self.list.append(line.strip()) def filter_0011(self,word): """ 判断输入词是否为敏感词 :param word: 输入 :return: """ word = word.decode(sys.stdin.encoding).encode('utf-8') for item in self.list: item = item.decode('utf-8').encode('utf-8') if item== word: print 'Freedom' return item print 'Human Rights' return None def filter_0012(self,string): """ 若输入词是敏感词则替换 :param string: :return: """ res = self.filter_0011(string) if res != None: string = string.replace(res,"*") print string if __name__ == "__main__": check = senseWord("filtered_words.txt") inputStr = raw_input("请输入: ").strip() check.filter_0012(inputStr)
Result:
UTF-8
请输入: 北京
*
Freedom
相关知识:
字符串编码问题
首先要搞清楚,字符串在Python内部的表示是unicode编码.
因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。
decode的作用是将其他编码的字符串转换成unicode编码,
如str1.decode('gb2312'),表示将gb2312编码的字符串转换成unicode编码。
encode的作用是将unicode编码转换成其他编码的字符串,
如str2.encode('gb2312'),表示将unicode编码的字符串转换成gb2312编码。
即:
decode用法:str -> decode('the_coding_of_str') -> unicode
encode用法:unicode -> encode('the_coding_you_want') -> str
判断字符串是什么格式的编码,可以用isinstance进行判断:
isinstance(s, unicode) #用来判断是否为unicode
终端的输入编码:sys.stdin.encoding
终端的输出编码:sys.stdout.encoding