丹麦的三个特殊元音&xE6ø;和å;在python列表中无法识别

丹麦的三个特殊元音&xE6ø;和å;在python列表中无法识别,python,python-2.7,unicode,ascii,Python,Python 2.7,Unicode,Ascii,我正在写一个程序,旨在帮助儿童和诵读困难者将一个单词分成音节。 软件需要计算给定单词中的所有元音 我已经做了代码,如果不包含特殊元音,它可以正确分割任何单词。 然而,如果我使用一个带有丹麦元音的单词,它就不能计算特殊元音,因此该单词不会被拆分成正确的sylables 这是我的代码: #!/usr/bin/env python -*- coding: utf-8 -*- import sys wordGiven = str(sys.argv[1]) vowelsArray = ["a", "

我正在写一个程序,旨在帮助儿童和诵读困难者将一个单词分成音节。 软件需要计算给定单词中的所有元音

我已经做了代码,如果不包含特殊元音,它可以正确分割任何单词。 然而,如果我使用一个带有丹麦元音的单词,它就不能计算特殊元音,因此该单词不会被拆分成正确的sylables

这是我的代码:

#!/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的字符串”


我应该怎么做才能使它工作?

您使用的是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"å"]
您可能想研究字节和字符之间的差异,尤其是在编解码器、Unicode和Python方面。我建议你阅读:

  • 乔尔斯波尔斯基

  • 内德·巴奇尔德


您使用的是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"å"]
您可能想研究字节和字符之间的差异,尤其是在编解码器、Unicode和Python方面。我建议你阅读:

  • 乔尔斯波尔斯基

  • 内德·巴奇尔德


那么在命令行上使用什么编解码器给出参数呢?换句话说,
print repr(wordGiven)
产生了什么?如果我打印repr(wordGiven),我会得到以下信息:'sl\xc3\xa5et'Right,这是一个UTF-8编码的Unicode文本
slået
,那么在命令行上使用了什么编解码器来给出参数呢?换句话说,
print repr(wordGiven)
产生了什么?如果我打印repr(wordGiven),我会得到以下信息:'sl\xc3\xa5et'Right,即Unicode文本
slået
的UTF-8编码。我可以让python脚本以单字节格式返回结果,以便PHP能够理解它吗?@Zahrec:'single byte format'?我不知道你说的是什么意思。您可以使用
unicodevalue.encode(codec)
将Unicode对象编码回字节;如果使用拉丁语1(
.encode('latin1'))
您得到的ISO 8859-1字节可以用每个字符一个字节对所有丹麦字母进行编码。@Zahrec:这仍然需要PHP端也需要拉丁-1数据。您也可以让它处理UTF-8。我可以让python脚本以单字节格式返回结果,以便PHP能够理解吗?@Zahrec:“单字节用于”mat'?不确定您的意思。如果您使用拉丁语1(
.encode('latin1'),则可以使用
unicodevalue.encode(codec)
)将Unicode对象编码回字节
您得到的ISO 8859-1字节可以用每个字符一个字节对所有丹麦字母进行编码。@Zahrec:这仍然需要PHP端也需要拉丁-1数据。您最好让它处理UTF-8。