1

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

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)

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

4

1 回答 1

1

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

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

替换此行可能会有所帮助:

completer = MyCompleter([item.encode('utf-8') for item in listOfItems])
于 2013-11-15T22:55:13.847 回答