如何将带有斯堪的纳维亚字符的UTF字符串转换为ASCII?

时间:2010-03-25 17:41:19

标签: python ascii utf

我想转换此字符串

foo_utf = u'nästy chäräctörs with å and co.' # unicode

进入这个

foo_ascii = 'nästy chäräctörs with å and co.' # ASCII

任何想法如何在Python(2.6)中执行此操作?我找到了unicodedata模块,但我不知道如何进行转换。

5 个答案:

答案 0 :(得分:4)

我认为你不能。那些“nästychäräctörs”不能编码为ASCII,所以你必须选择不同的编码(UTF-8或Latin-1或Windows-1252或其他)。

答案 1 :(得分:3)

尝试使用encode字符串方法。

>>> u'nästy chäräctörs with å and co.'.encode('latin-1')
'n\xe4sty ch\xe4r\xe4ct\xf6rs with \xe5 and co.'

答案 2 :(得分:3)

python的stdlib中codecs模块中有几个选项,具体取决于你希望如何处理扩展字符:

>>> import codecs
>>> u = u'nästy chäräctörs with å and co.'
>>> encode = codecs.get_encoder('ascii')
>>> encode(u) 
'
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 1: ordinal not in range(128)
>>> encode(u, 'ignore')
('nsty chrctrs with  and co.', 31)
>>> encode(u, 'replace')
('n?sty ch?r?ct?rs with ? and co.', 31)
>>> encode(u, 'xmlcharrefreplace')
('n&#228;sty ch&#228;r&#228;ct&#246;rs with &#229; and co.', 31)
>>> encode(u, 'backslashreplace')
('n\\xe4sty ch\\xe4r\\xe4ct\\xf6rs with \\xe5 and co.', 31)

希望其中一个能满足您的需求。 Python codecs module documentation中提供了更多信息。

答案 3 :(得分:2)

您还可以使用python中提供的unicodedata模块(http://docs.python.org/library/unicodedata.html)将大量unicode值转换为Ascii变体。 IE修复了不同的“s”等。通过encode()方法跟进,你可以完全清理一个字符串。

你主要通过unicodedata进行规范化的方法并将其传递给NFKC标志。

答案 4 :(得分:2)

这真的是一个Django问题,而不是python问题。 如果字符串位于您的.py文件中,请确保在文件顶部有以下行: -*- coding: utf-8 -*-

此外,您的字符串必须是“unicode”(u'foobar')

类型

然后确保您的html页面以unicode工作:

<meta http-equiv="content-type" content="text/html;charset=utf-8" />

这应该是完整的伎俩。不需要编码/解码等,只需确保一切都是unicode,并且你是安全的。