在Python中将Unicode字符串转换为字符串(包含额外符号)

Convert a Unicode string to a string in Python (containing extra symbols)

如何将一个unicode字符串(包含额外的字符,如镑等)转换为python字符串?


1
2
3
4
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编码,如果您don’t需要翻译的非ASCII字符。

1
2
3
4
5
6
7
8
>>> a=u"aaaà??????"
>>> type(a)
<type 'unicode'>
>>> a.encode('ascii','ignore')
'aaa'
>>> a.encode('ascii','replace')
'aaa???????'
>>>


1
2
3
>>> text=u'abcd'
>>> str(text)
'abcd'

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


如果你有一个Unicode字符串,你想写一本连载的形式或其他文件,第一,你必须是一个特定的编码表示的信息可以存储。有几个普通Unicode UTF-16编码,如(双字节的Unicode字符必须使用UTF-8)或(1,4字节/会取决于字符,字符串等),转换到一个特定的编码,你可以使用:

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

这个原始的字节串,可以写一个文件。然而,注意,当你阅读它回来,它是必须知道的编码和解码使用相同的信息编码。

当一个文件的写作,你可以摆脱本手册编码/解码过程使用的编解码器模块。因此,打开一个文件,encodes所有Unicode UTF-8字符串,使用:

1
2
3
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)在文本文件的打开方式。


这里是一个例子:

1
2
3
4
>>> u = u'€€€'
>>> s = u.encode('utf8')
>>> s
'\xe2\x82\xac\xe2\x82\xac\xe2\x82\xac'


嗯,如果你愿意/准备切换到Python 3(你可能不在一个向后的incompatibility尽职2一些Python代码),你不需要做任何转换;文本是所有Python的Unicode字符串代表3个,这意味着,所以没有更多的使用在u''语法。你要的是什么,事实上,字符串表示字节,这是用来代表数据(这可能是在编码的字符串)。

docs.python.org http:/ / / / / 3.0.html 3.1 whatsnew #文本和数据而不是学院的8位Unicode vs

(当然,如果你正在使用Python 3,那么问题可能是什么做的是你要如何拯救一个N的文本文件)。


这里是一个示例代码

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


1
2
import json, ast
jdata = ast.literal_eval(json.dumps(jdata)) # Removing uni-code chars