【发布时间】:2012-10-30 19:35:48
【问题描述】:
我有一个包含句子的文件,其中一些是西班牙语,并且包含重音字母(例如 é)或特殊字符(例如 ¿)。我必须能够在句子中搜索这些字符,以便确定该句子是西班牙语还是英语。
我已尽力做到这一点,但没有成功。以下是我尝试过的解决方案之一,但显然给出了错误的答案。
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 方法对两个字符串进行规范化,然后进行相应的比较。感谢你们的及时和大力支持。
【问题讨论】:
-
你怎么知道文件是 Latin-1,而不是 UTF-8 或 Windows 编码?
-
我不知道,Latin-1 是我的最佳猜测。如何检查?
-
@user1411331:尝试使用 UTF-8 解码。最有可能的是,如果它是 UTF-8,它将成功,而如果它尝试使用 UTF-8 解码 Latin-1,它将失败。尝试使用 Latin-1 解码 UTF-8 不会失败,但会给出错误数据,例如
¿Qué tipo es el?。 -
使用 [
od] 之类的工具查看实际文件中的字节数。如果文件是 UTF-8,'é'使用超过一个字节进行编码。区分 CP1252 和 Latin-1 比较棘手,您需要查看它们各自的规范并找出两者中哪个字符的编码不同。 -
我猜它不是 Latin-1,因为这种编码主要用于 Unixen,而大部分 Linux 已经过渡到使用 UTF-8。