将Unicodestring转换为Python中的string(包含额外的符号)

你如何将一个Unicodestring(包含额外的字符,如$ $等)转换为一个Pythonstring?

 title = u"Klüft skräms inför på fédéral électoral große" import unicodedata unicodedata.normalize('NFKD', title).encode('ascii','ignore') 'Kluft skrams infor pa federal electoral groe' 

如果您不需要转换非ASCII字符,则可以使用encode到ASCII:

 >>> a=u"aaaàçççñññ" >>> type(a) <type 'unicode'> >>> a.encode('ascii','ignore') 'aaa' >>> a.encode('ascii','replace') 'aaa???????' >>> 

如果你有一个Unicodestring,并且你想把它写到一个文件或者其他序列化的表单中,你必须首先编码成一个可以存储的特定表示。 有几种常见的Unicode编码,例如UTF-16(对大多数Unicode字符使用两个字节)或UTF-8(取决于字符的1-4字节/码点)等等。要将该string转换为特定的编码,可以使用:

 >>> s= u'£10' >>> s.encode('utf8') '\xc2\x9c10' >>> s.encode('utf16') '\xff\xfe\x9c\x001\x000\x00' 

这个原始的字节串可以被写入一个文件。 但是,请注意,读取它时,必须知道它是什么编码,并使用相同的编码进行解码。

写入文件时,您可以使用编解码器模块摆脱手动编码/解码过程。 因此,要打开一个将所有Unicodestring编码为UTF-8的文件 ,请使用:

 import codecs f = codecs.open('path/to/file.txt','w','utf8') f.write(my_unicode_string) # Stored on disk as UTF-8 

请注意,使用这些文件的任何其他内容,如果他们想要读取它们,都必须了解文件的编码方式。 如果你是唯一一个读/写这不是一个问题,否则确保你写在一个可以理解的任何其他使用文件的forms。

在Python 3中,这种forms的文件访问是默认的,内置的open函数将采用一个编码参数,并且总是针对以文本模式打开的文件的Unicodestring(Python 3中的默认string对象)进行翻译。

 >>> text=u'abcd' >>> str(text) 'abcd' 

如果该string只包含ascii字符。

这里是一个例子:

 >>> u = u'€€€' >>> s = u.encode('utf8') >>> s '\xe2\x82\xac\xe2\x82\xac\xe2\x82\xac' 

那么,如果你愿意/准备切换到Python 3(这可能不是由于与某些Python 2代码的向后不兼容),那么不必进行任何转换。 Python 3中的所有文本都以Unicodestring表示,这也意味着不再使用u'<text>'语法。 实际上,还有什么是用来表示数据(可能是编码string)的字节串。

http://docs.python.org/3.1/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit

(当然,如果你正在使用Python 3,那么这个问题可能与你试图将文本保存到一个文件有关。

这是一个示例代码

 import unicodedata raw_text = u"here $%6757 dfgdfg" convert_text = unicodedata.normalize('NFKD', raw_text).encode('ascii','ignore')