7

我有一个包含句子的文件,其中一些是西班牙语,包含重音字母(例如 é)或特殊字符(例如 ¿)。我必须能够在句子中搜索这些字符,以便确定该句子是西班牙语还是英语。

我已经尽力做到这一点,但没有成功。以下是我尝试过的解决方案之一,但显然给出了错误的答案。

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方法对两个字符串进行标准化,然后进行相应的比较。感谢你们的及时和大力支持。

4

2 回答 2

5

unicodedata.normalize检查前在字符串上使用。

解释

Unicode 提供多种形式来创建某些字符。例如,á可以用单个字符á、 或两个字符来表示:a,然后 'put a ´on that'。规范化字符串将强制它使用一种或另一种表示形式。(它归一化的表示取决于您作为form参数传递的内容)

于 2012-11-10T20:24:57.150 回答
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隐式编码终端编码中的输出。

于 2012-11-11T19:37:49.570 回答