比较 unicode 和 python 中的 unicode



我正在尝试计算以UTF-8保存的乌尔都语文档中相同单词的数量。

所以例如,我的文档包含 3 个用空格分隔的完全相同的单词

خُداوند خُداوند خُداوند

我尝试使用以下代码读取文件来计算单词:

        file_obj = codecs.open(path,encoding="utf-8")
        lst = repr(file_obj.readline()).split(" ")
        word = lst[0]
        count =0
        for w in lst:
            if word == w:
                count += 1
        print count
但是我得到的

计数值是 1,而我应该得到 3。

如何比较 Unicode 字符串?

从代码中删除repr()。仅使用 repr() 创建调试输出;您正在将 Unicode 值转换为可以粘贴回解释器的字符串。

这意味着文件中的行现在存储为:

>>> repr(u'خُداوند خُداوند خُداوندn').split(" ")
["u'\u062e\u064f\u062f\u0627\u0648\u0646\u062f", '\u062e\u064f\u062f\u0627\u0648\u0646\u062f', "\u062e\u064f\u062f\u0627\u0648\u0646\u062f\n'"]

请注意反斜杠(转义的 unicode 转义),第一个字符串以 u' 开头,最后一个字符串以 \n' 结尾。这些值显然永远不会相等。

删除repr(),并使用不带参数的.split()来删除尾随空格:

lst = file_obj.readline().split()

您的代码将正常工作:

>>> res = u'خُداوند خُداوند خُداوندn'.split()
>>> res[0] == res[1] == res[2]
True

您可能需要先规范化输入;某些字符可以表示为一个 unicode 代码点或两个组合代码点。规范化会将所有此类字符移动到组合或分解状态。请参阅规范化 Unicode。

尝试删除repr

lst = file_obj.readline().split(" ")

关键是你至少应该printlstw这样的变量,看看它们是什么。

比较 Python 中的 unicode 字符串:

a = u'Artur'
print(a)
b = u'u0041rtur'
print(b)
if a == b:
    print('the same')

结果:

Artur
Artur
the same

最新更新