【问题标题】:The three special Danish vowels æ, ø and å are not recognized in python listpython 列表中无法识别三个特殊的丹麦元音 æ、ø 和 å
【发布时间】:2015-03-04 05:38:44
【问题描述】:

我正在编写一个程序,该程序旨在帮助孩子和阅读障碍者将单词分成音节。 软件要做到这一点,它需要计算给定单词中的所有元音。

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

这是我的代码:

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

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

【问题讨论】:

  • 然后使用什么编解码器在命令行上给出参数?换句话说,print repr(wordGiven) 产生了什么?
  • 如果我打印 repr(Wordgiven) 我得到以下信息:'sl\xc3\xa5et'
  • 对,这是一个 UTF-8 编码的 Unicode 文本 slået 的字节串。

标签: python python-2.7 unicode ascii


【解决方案1】:

您正在使用 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"å"]

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

【讨论】:

  • 我可以让python脚本以单字节格式返回结果以便PHP可以理解吗?
  • @Zahrec: '单字节格式'?不确定你的意思。您可以使用 unicodevalue.encode(codec) 将 Unicode 对象编码回字节;如果您使用拉丁语 1 (.encode('latin1'),您将获得 ISO 8859-1 字节,该字节可以对所有丹麦字母表进行编码,每个字符一个字节。
  • @Zahrec:这仍然需要 PHP 端也需要 Latin-1 数据。你也可以让它处理 UTF-8。
猜你喜欢
  • 2021-04-19
  • 2011-10-29
  • 2018-01-28
  • 1970-01-01
  • 2021-09-05
  • 1970-01-01
  • 2013-02-15
  • 2012-05-31
  • 1970-01-01
相关资源
最近更新 更多