python 列表中不识别三个特殊的丹麦元音 æ、ø 和 å

Cyb*_*urk 1 python unicode ascii python-2.7

我正在编写一个程序,旨在帮助儿童和诵读困难症患者将单词划分为音节。\n为了让软件执行此操作,它需要计算给定单词中的所有元音。

\n\n

我已经编写了代码,如果不包含特殊元音,它可以正确地分割任何单词。\n但是,如果我使用带有丹麦元音的单词,它不会计算特殊元音,因此该单词不会被分割成正确的音节。

\n\n

这是我的代码:

\n\n
#!/usr/bin/env python\n-*- coding: utf-8 -*-\n\nimport sys\n\nwordGiven = str(sys.argv[1])\n\nvowelsArray = ["a", "e", "i", "o", "u", "y", "\xc3\xa6", "\xc3\xb8", "\xc3\xa5"]\n\nvowelsFoundInWord = 0;\n\ncounter = 0\nfor char in wordGiven:\n    if char in vowelsArray:\n        vowelsFoundInWord += 1\n    counter += 1\n\nprint vowelsFoundInWord\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果我向脚本输入“sl\xc3\xa5et”一词,它只会打印 1。我能做什么?\n我已经尝试在列表和循环中写入 ord("\xc3\xa5") ,但随后出现错误:ord()“需要一个字符,但找到长度为 2 的字符串”。

\n\n

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

\n

Mar*_*ers 6

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

\n\n

你的假设是不正确的;ASCII 字符集之外的任何内容都需要 2 个或更多字节才能以 UTF-8 进行编码。这意味着\xc3\xa5您将获得两个字节:

\n\n
>>> "\xc3\xa5"\n\'\\xc3\\xa5\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

既没有\\xc3也没有\\xa5出现在你的元音列表中。

\n\n

如果您的输入也是 UTF-8 编码的,您需要将其解码为 Unicode,使用 Unicode 元音,并使用它来测试:

\n\n
wordGiven = unicode(sys.argv[1], \'utf8\')\n\nvowelsArray = [u"a", u"e", u"i", u"o", u"u", u"y", u"\xc3\xa6", u"\xc3\xb8", u"\xc3\xa5"]\n
Run Code Online (Sandbox Code Playgroud)\n\n

您可能想研究字节字符之间的区别,尤其是在编解码器、Unicode 和 Python 方面。我建议您阅读:

\n\n\n