【发布时间】:2015-12-02 03:54:51
【问题描述】:
就在我想着要把 unicode 转换为字符串时,Python 2.7 抛出了一个异常。
下面的代码循环了许多重音字符并将它们转换为它们的非重音等价物。我已经为双 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
没有尝试/除了我得到一个错误:
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。
【问题讨论】:
-
你从哪里运行代码?
-
来自脚本,在 d 驱动器上的文件夹中。运行 Python 2.7,Windows XP 机器。
-
您是否使用 cmd 提示符来运行它?我对 Windows 不太熟悉,但我认为 cp437 不是正确的代码页
-
Sublime 需要知道你生成的数据是哪种编码方式。尝试将
LANG变量添加到您的 sublime-build 设置中。 stackoverflow.com/questions/15166076/… -
还有一个库可以做你想做的事情pypi.python.org/pypi/Unidecode
标签: string python-2.7 unicode try-except