完成国际字符

时间:2013-11-14 16:48:46

标签: python autocomplete

我正在使用以下代码完成文本:

class MyCompleter(object):  # Custom completer

    def __init__(self, options):
        self.options = sorted(options) 

    def complete(self, text, state):
        if state == 0:  # on first trigger, build possible matches
            if text:  # cache matches (entries that start with entered text)
                self.matches = [s for s in self.options
                                    if s and s.startswith(text)]
            else:  # no text entered, all matches possible
                self.matches = self.options[:]
        # return match indexed by state
        try: 
            return self.matches[state]
        except IndexError:
            return None

def setCompleter(listOfItems):
  readline.parse_and_bind('tab: complete')
  readline.parse_and_bind('set editing-mode vi')
  completer = MyCompleter(listOfItems)
  readline.set_completer(completer.complete)

选项取自数据库。当我需要完成它 提供的选项不包含diacritic的国际字符。 我可以自定义代码以提供包含变音符号的选项吗?

1 个答案:

答案 0 :(得分:1)

我怀疑你使用的是Python2;在Python3中,这可能“正常”。

您的数据库正在返回unicode个对象,readline库在使用前将其转换为字符串。默认情况下,此转换使用ascii编解码器,适用于u"Name",但u"Näme"失败。

可能有助于替换此行:

completer = MyCompleter([item.encode('utf-8') for item in listOfItems])