我有一个带句子的文件,其中一些是西班牙语,包含重音字母(例如é)或特殊字符(例如¿)。我必须能够在句子中搜索这些字符,以便确定句子是西班牙语还是英语。
我已经尽力做到这一点,但是没有运气好。以下是我尝试过的解决方案之一,但显然给出了错误的答案。
sentence = ¿Qué tipo es el? #in str format, received from standard open file method
sentence = sentence.decode('latin-1')
print 'é'.decode('latin-1') in sentence
>>> False
我也尝试使用codecs.open(..,..,'latin-1')来读取文件,但这没有帮助。然后我尝试了u'é'.encode('latin-1'),但这不起作用。
我在这里没有想法,有什么建议吗?
@icktoofay提供了解决方案。我最后保留了文件的解码(使用latin-1),然后使用Python unicode作为字符(u'é'
)。这要求我在脚本的顶部设置Python unicode编码。最后一步是使用unicodedata.normalize
方法对两个字符串进行规范化,然后进行相应的比较。谢谢你们的快速和大力支持。
答案 0 :(得分:5)
在检查之前对字符串使用unicodedata.normalize
。
Unicode提供多种形式来创建一些字符。例如,á
可以用单个字符á
或两个字符表示:a
,然后“将´
置于其上”。规范化字符串将强制它到一个或另一个表示。 (它规范化的表示取决于您作为form
参数传递的内容)
答案 1 :(得分:0)
我怀疑您的终端使用的是UTF-8,因此'é'.decode('latin-1')
不正确。只需使用Unicode常量u'é'
。
要在脚本中正确处理Unicode,请声明脚本和数据文件编码,并解码传入数据,并对传出数据进行编码。在脚本中使用Unicode字符串作为文本。
示例(以UTF-8保存脚本):
# coding: utf8
import codecs
with codecs.open('input.txt',encoding='latin-1') as f:
sentence = f.readline()
if u'é' in sentence:
print u'Found é'
请注意print
隐式编码终端编码中的输出。