为什么 unicode 转字符串只适用于 try/except?

Why does unicode to string only work with try/except?

就在我以为我已经把 unicode 转换为字符串时,我的脑子里一片空白 Python 2.7 抛出异常。

下面的代码遍历多个重音字符并将它们转换为非重音字符。我已经为 double s 添加了一个特例。

#!/usr/bin/python
# -*- coding: utf-8 -*-
import unicodedata

def unicodeToString(uni):
  return unicodedata.normalize("NFD", uni).encode("ascii", "ignore")

accentList = [
#(grave accent)
u"à",
u"è",
u"ì",
u"ò",
u"ù",
u"À",
u"È",
u"Ì",
u"Ò",
u"Ù",

#(acute accent)
u"á",
u"é",
u"í",
u"ó",
u"ú",
u"ý",
u"Á",
u"É",
u"Í",
u"Ó",
u"Ú",
u"Ý",

#(arrete accent) 
u"â",
u"ê",
u"î",
u"ô",
u"û",
u"Â",
u"Ê",
u"Î",
u"Ô",
u"Û",

#(tilde )
u"ã",
u"ñ",
u"õ",
u"Ã",
u"Ñ",
u"Õ",

#(diaresses)
u"ä",
u"ë",
u"ï",
u"ö",
u"ü",
u"ÿ",
u"Ä",
u"Ë",
u"Ï",
u"Ö",
u"Ü",
u"Ÿ",

#ring 
u"å",
u"Å",

#ae ligature
u"æ",
u"Æ", 

#oe ligature
u"œ",
u"Œ",

#c cidilla
u"ç",
u"Ç",

# D stroke?
u"ð",
u"Ð",

# o slash
u"ø",
u"Ø",

u"¿", # Spanish ?
u"¡", # Spanish !
u"ß"  # Double s
]

for i in range(0, len(accentList)):
  try:
    u = accentList[i]
    s = unicodeToString(u)
    if u == u"ß":
      s = "ss"
    print("%s -> %s" % (u, s))
  except:
    pass

没有 try/except 我得到一个错误:

File "C:\Python27\lib\encodings\cp437.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\xc0' in  position 0
: character maps to <undefined>

我可以做些什么来在不使用 try/except 的情况下制作代码 运行 吗?我正在使用 Sublime Text 2。

try/except 不会使 Unicode 工作。它只是隐藏错误。

要修复 UnicodeEncodeError 错误,请删除 try/except 并查看 Python, Unicode, and the Windows console