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\nRun Code Online (Sandbox Code Playgroud)\n\n如果我向脚本输入“sl\xc3\xa5et”一词,它只会打印 1。我能做什么?\n我已经尝试在列表和循环中写入 ord("\xc3\xa5") ,但随后出现错误:ord()“需要一个字符,但找到长度为 2 的字符串”。
\n\n我应该做什么才能让它发挥作用?
\n您正在使用 UTF-8 编码数据,但假设所有字母都只编码为一个字节。当您迭代 时wordGiven,您正在迭代字节,而不是字符。
你的假设是不正确的;ASCII 字符集之外的任何内容都需要 2 个或更多字节才能以 UTF-8 进行编码。这意味着\xc3\xa5您将获得两个字节:
>>> "\xc3\xa5"\n\'\\xc3\\xa5\'\nRun Code Online (Sandbox Code Playgroud)\n\n既没有\\xc3也没有\\xa5出现在你的元音列表中。
如果您的输入也是 UTF-8 编码的,您需要将其解码为 Unicode,使用 Unicode 元音,并使用它来测试:
\n\nwordGiven = 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"]\nRun Code Online (Sandbox Code Playgroud)\n\n您可能想研究字节和字符之间的区别,尤其是在编解码器、Unicode 和 Python 方面。我建议您阅读:
\n\n每个软件开发人员绝对必须了解 Unicode 和字符集(没有任何借口!)的绝对最低标准,作者:Joel Spolsky
Ned Batchelder 的实用 Unicode
Python Unicode 指南
| 归档时间: |
|
| 查看次数: |
4096 次 |
| 最近记录: |