【问题标题】:Croatian characters and python克罗地亚字符和蟒蛇
【发布时间】:2014-09-22 06:05:19
【问题描述】:

我做了一个简单的程序,它可以判断给定的字符串是否在文件中。

a=raw_input('write some string ')
f1=open("croatian.txt",'r')

def check():

    found = False 
    for line in f1:
        if ("%s"%a) in line:
        found=True
    print found


check()

我使用了上面编写的代码无法识别的几个字符(č、ć、ž、đ、š)(克罗地亚语中的字符)。例如,如果我写字符串“čokolada”,程序会说“False”,尽管在文件中找到单词“čokolada”。如何解决?

【问题讨论】:

  • 为什么要用("%s"%a)这个表达式?和a一样。
  • 因为我在某处看到并学习过这种方式
  • @Zvone 忘记它。 if a in line: 做同样的事情。

标签: python string file utf-8


【解决方案1】:

您可能正试图打开一个 unicode 文件(通常采用 UTF-8 编码)。 由于任何文件都可以用 ASCII 读取和解码,所以这里也不例外。

使用编解码器打开此类文件:

import codecs
f1 = codecs.open("croatian.txt", "r", "utf-8")

你也可以用更 Python 的方式重构你的函数:

print 'Found' if any(a in line for line in f1) else 'Not Found'

【讨论】:

  • 同上。它没有帮助我。
【解决方案2】:

文本可能使用了不同的编码。如果文件是 UTF-8 编码的,但您在 Windows 上运行该程序,几乎可以肯定。您应该将所有内容都转换为 Unicode,然后进行检查。

转换输入字符串:

a = a.decode(sys.stdin.encoding)

要转换文件,您可以使用codecs 打开文件,也可以在读取时转换每一行。请注意,您只需要一项这些更改!

f1 = codecs.open("croatian.txt", 'r', 'utf-8')

或:

line = line.decode('utf-8')

【讨论】:

  • 试过了,但对我没有帮助。包含 č,ć,ž,š,đ 的单词仍然是“假”。
  • @ZvonePeran 您确定文件的编码吗?可能不是 UTF8。
  • 是的。我现在已经检查过了。仍然没有得到溶液。还有什么想法吗?
  • @ZvonePeran 试试print repr(a) 看看字符串中是否有任何意外字符。
  • 我已经做到了,对于“čokolada”这个词,我得到了答案 u'\u010dokolada'。这是预期的行为吗?
猜你喜欢
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多