丹麦的三个特殊元音&xE6ø;和å;在python列表中无法识别
我正在写一个程序,旨在帮助儿童和诵读困难者将一个单词分成音节。 软件需要计算给定单词中的所有元音 我已经做了代码,如果不包含特殊元音,它可以正确分割任何单词。 然而,如果我使用一个带有丹麦元音的单词,它就不能计算特殊元音,因此该单词不会被拆分成正确的sylables 这是我的代码:丹麦的三个特殊元音&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", "
#!/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方面。我建议你阅读:
- 乔尔斯波尔斯基
- 内德·巴奇尔德
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。