如何将Unicode字符串(包含<!>#163; $等额外字符)转换为Python字符串?

有帮助吗?

解决方案

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 to ASCII:

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

如果字符串只包含ascii字符。

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

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

这个原始字节串可以写入文件。但请注意,在阅读它时,您必须知道它所使用的编码并使用相同的编码对其进行解码。

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

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

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

在Python 3中,这种形式的文件访问是默认的,内置的open函数将采用编码参数并始终转换为Unicode字符串(Python 3中的默认字符串对象),用于打开的文件在文字模式下。

以下是一个例子:

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

好吧,如果您愿意/准备切换到Python 3(您可能不会因为某些Python 2代码的向后兼容性而导致),您不必进行任何转换; Python 3中的所有文本都用Unicode字符串表示,这也意味着不再使用u'<text>'语法。实际上,你还有一些字节串,用于表示数据(可能是一个编码的字符串)。

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')
import json, ast
jdata = ast.literal_eval(json.dumps(jdata)) # Removing uni-code chars
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top