【问题标题】:Non ASCII character error python非ASCII字符错误python
【发布时间】:2014-12-06 16:56:19
【问题描述】:

我是一名初级程序员,正在尝试编写一个生成随机密码的 python 脚本。但是,即使我声明了编码 #utf-8,我总是会收到非 ASCII 字符错误,正如 Stack Overflow 中另一个类似问题中提到的那样。这是源代码:

import string
import random
#coding: utf-8
print "Password generator will create a random customizable password."
print "Choose your options wisely."
number = int(input("How many letters do you want in your password?"))
caps = str(input("Do you want capital letters in your password? Y/N"))
symbols = str(input( "Do you want punctuation, numbers and other symbols in your password? Y/N"))
punctuation = ("!", ".", ":", ";", ",", "?", "'", "@", "£", "$", "«", "»", "~", "^","%", "#", "&", "/", range(0, 11))
lowercase = string.ascii_lowercase
uppercase = string.ascii_uppercase
if caps == "N":
    characters = lowercase
else:
    characters = uppercase + lowercase
if symbols == "Y":
    characters += punctuation
password = random.sample(characters, number)
print "The password is", password "."

这是终端输出

pedro@pedro-Inspiron-3521:~/Desktop$ python passwordgenerator.py

文件“passwordgenerator.py”,第 9 行 SyntaxError:第 9 行的文件 passwordgenerator.py 中的非 ASCII 字符“\xc2”,但未声明编码;详情见http://www.python.org/peps/pep-0263.html

我检查了链接,但我什么都听不懂,可能是因为我不是以英语为母语的人,而且我不久前开始编程。在此先感谢您的帮助。

【问题讨论】:

  • 在 Python 2.7 上使用 raw_input() 而不是 input()。后者评估其输入,即它的工作方式类似于eval(raw_input())

标签: python-2.7 non-ascii-characters


【解决方案1】:

如果您使用的是 Mac,则文件 .DS_STORE 会在读取文件夹内容时导致 ascii 错误。

如果您使用的是 mac,请执行这些操作

  • 删除所有 DS_Store 文件

  • 选择应用程序 > 实用程序以启动终端。

  • 输入以下 UNIX 命令:

  • sudo find / -name ".DS_Store" -depth -exec rm {} \;

  • 当提示输入密码时,请输入您的 Mac OS X 管理员 密码

【讨论】:

  • 虽然这是一个很好的答案并且可能,但在 Mac 上更可能的原因是从编辑器复制到终端,这会导致非 Python 友好的前导空格。只需替换前导空格即可解决问题。
【解决方案2】:

#coding: utf-8 行需要位于文件顶部以允许使用非 ASCII 字符。

£«» 不是 ASCII。

虽然您可能不希望密码中包含非 ASCII 字符,并且大多数网站都不允许使用非 ASCII 字符,但理论上没有理由不允许使用它们。

【讨论】:

    【解决方案3】:

    您的标点符号列表中有>><< 符号。

    这些无效。尝试找到他们的 unicode 代码

    http://www.fileformat.info/info/unicode/char/bb/index.htm http://www.fileformat.info/info/unicode/char/ab/index.htm

    编辑: 哦,但是等等,这是一个密码生成器,所以不要甚至将双 V 形符号作为标点符号列表的一部分,因为它们在任何密码中都无效。

    punctuation = ("!", ".", ":", ";", ",", "?", "'", "@", "$", "~", "^", "%", "#", "&", "/", range(0, 11))
    

    另外,为什么要在标点元组中添加数字?

    为什么不使用 string.punctuation 和 string.digits 来代替?

    【讨论】:

    • 所以在你给我的链接中它说«在python源代码中是u"\u00AB"并且»是u"\u00BB"。我应该在“”中包含这个吗?
    • 我删除了它们,但它仍然无法正常工作。我也犯了同样的错误
    • 这是我目前拥有的标点符号变量: punctuation = ("!", ".", ":", ";", ",", "?", "'", " @"、"£"、"$"、"~"、"^"、%"、"#"、"&"、"/"、范围(0, 11))
    • 回答你的问题,我不知道数字是什么,或者 string.punctuation 和 string.digits 会做什么。但是,我一定会搜索它。谢谢,好心的陌生人
    • 抱歉 @agf 和 A​​pero ,无法对您的任何答案进行投票,尝试投票并显示投票需要 15 声望 :(
    猜你喜欢
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多