三个特殊的丹麦元音æ,ø和å在蟒蛇名单中不被认可

时间:2015-01-06 14:19:09

标签: python python-2.7 unicode ascii

我正在编写一个程序,该程序可以帮助孩子和阅读障碍者将一个单词分成音节。 对于软件来说,它需要计算给定单词中的所有元音。

我已经制作了代码,如果它们不包含特殊元音,它可以将任何单词分开。 但是,如果我使用带有丹麦元音的单词,它就会计算特殊的元音,因此这个单词不会被分成正确的元素。

这是我的代码:

#!/usr/bin/env python
-*- coding: utf-8 -*-

import sys

wordGiven = str(sys.argv[1])

vowelsArray = ["a", "e", "i", "o", "u", "y", "æ", "ø", "å"]

vowelsFoundInWord = 0;

counter = 0
for char in wordGiven:
    if char in vowelsArray:
        vowelsFoundInWord += 1
    counter += 1

print vowelsFoundInWord

如果我用“slået”这个词来提供脚本,它只会打印1.我该怎么办? 我已经尝试在列表和循环中编写ord(“å”),但后来我得到一个错误:ord()“预期一个字符,但找到长度为2的字符串”。

我该怎么做才能让它发挥作用?

1 个答案:

答案 0 :(得分:3)

您使用的是UTF-8编码数据,但假设所有字母都只编码为一个字节。当您遍历wordGiven时,您正在迭代字节,而不是字符。

您的假设不正确; ASCII字符集之外的任何内容都需要2个或更多字节才能以UTF-8编码。 å表示您将获得两个字节:

>>> "å"
'\xc3\xa5'

\xc3\xa5都不会出现在您的元音列表中。

如果您的输入也是UTF-8编码,则需要解码指向Unicode,使用Unicode元音,然后使用它进行测试:

wordGiven = unicode(sys.argv[1], 'utf8')

vowelsArray = [u"a", u"e", u"i", u"o", u"u", u"y", u"æ", u"ø", u"å"]

您可能想要研究 bytes characters 之间的区别,特别是在编解码器,Unicode和Python时。我建议你阅读:

相关问题