我正在编写一个程序,该程序可以帮助孩子和阅读障碍者将一个单词分成音节。 对于软件来说,它需要计算给定单词中的所有元音。
我已经制作了代码,如果它们不包含特殊元音,它可以将任何单词分开。 但是,如果我使用带有丹麦元音的单词,它就会计算特殊的元音,因此这个单词不会被分成正确的元素。
这是我的代码:
#!/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的字符串”。
我该怎么做才能让它发挥作用?
答案 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时。我建议你阅读: