Python函数中的日语

0 投票
5 回答
779 浏览
提问于 2025-04-15 20:52

我写了一个Python函数,用来判断两个单词是否相似。

现在我想把日文文本传入这个函数,但它报错说“不是ASCII字符”。我尝试使用utf-8编码,但还是出现同样的错误。

Non-ASCII character '\xe3' in file

有没有办法解决这个问题?因为这两个关键词是不固定的,所以我无法生成msg文件。

下面是我的代码

def filterKeyword(keyword, adText, filterType):
if (filterType == 'contains'):
    try :
        adtext = str.lower(adText)
        keyword = str.lower(keyword)
        if (adtext.find(keyword)!=-1):
            return '0'
    except:
        return '1'
if (filterType == 'exact'):
    var = cmp(str.lower(adText), str.lower(keyword))
    if(var == 0 ):
        return '0'

return '1'

我使用了以下内容:

filterKeyword(unicode('ポケモン').encode("utf-8"), unicode('黄色のポケモン').encode("utf-8"), 'contains')

filterKeyword('ポケモン'.encode("utf-8"), '黄色のポケモン'.encode("utf-8"), 'contains')

这两种方法都报错了。

5 个回答

0

放置:

# -*- coding: utf-8 -*-

在你脚本的前两行之一。这样解释器就能知道代码和字符串使用的是什么编码。

尽量使用Unicode字符串。如果运气好的话,即使这个函数最初不是为了支持Unicode而写的,它也可能能很好地处理Unicode参数(比如用u"某些内容…"代替"某些内容...")。

1

请不要这样做:

adtext = str.lower(adText)
keyword = str.lower(keyword)

请这样做:

adtext= adText.lower()
keyword = keyword.lower()

请不要这样做:

cmp(str.lower(adText), str.lower(keyword))

请这样做:

return adText.lower() == keyword.lower()

请不要这样做:

try:
    # something
except:
    # handler

请提供一个具体的异常类型。像 Exception 这样的通用异常可以接受。但有些错误不是异常,无法有效捕捉。

try:
    # something
except Exception:
    # handler

另外,捕捉异常后返回 True 的可能性非常小。

请不要这样做:

return '1' 
return '0'

你可能不想返回一个字符。更可能的是你想返回 True 或 False。

return True
return False

如果你按照正确的方法来做,你的代码会正常工作。

>>> u'ポケモン'.lower() == u'黄色のポケモン'.lower()
False
>>> u'ポケモン'.lower() in  u'黄色のポケモン'.lower()
True
3

这个对我有效:

# -*- coding: utf-8 -*-

def filterKeyword(keyword, adText, filterType):
    # same as yours

filterKeyword(u'ポケモン', u'黄色のポケモン', 'contains')

撰写回答