从字符串中删除特殊字符(¡)

时间:2015-10-23 18:34:36

标签: python unicode special-characters

我正在尝试从集合中写入文件。该系列具有特殊字符,例如¡会产生问题。例如,集合中的内容包含以下详细信息:

  

{...,姓名:¡嗨!,......}

现在我正在尝试将相同内容编写到文件中,但是我收到了错误

UnicodeEncodeError: 'ascii' codec can't encode character u'\xa1' in position 0: ordinal not in range(128)

我尝试使用here提供的解决方案,但徒劳无功。如果有人可以帮助我,那将会很棒:)

所以这个例子是这样的:

我有一个集合,其中包含以下详细信息

{ "_id":ObjectId("5428ead854fed46f5ec4a0c9"), 
   "author":null,
   "class":"culture",
   "created":1411967707.356593,
   "description":null,
   "id":"eba9b4e2-900f-4707-b57d-aa659cbd0ac9",
   "name":"¡Hola!",
   "reviews":[

   ],
   "screenshot_urls":[

   ]
}

现在我尝试从集合中访问此处的name条目,然后通过在集合上迭代来完成此操作,即

f = open("sample.txt","w");

for val in exampleCollection:
   f.write("%s"%str(exampleCollection[val]).encode("utf-8"))

f.close();

4 个答案:

答案 0 :(得分:2)

删除不需要的字符的最简单方法是指定您执行的字符。

>>> import string
>>> validchars = string.ascii_letters + string.digits + ' '
>>> s = '¡Hi there!'
>>> clean = ''.join(c for c in s if c in validchars)
>>> clean
'Hi there'

如果某些形式的标点符号可以,请将它们添加到validchars。

答案 1 :(得分:1)

这将删除字符串中无效ASCII的所有字符。

>>> '¡Hola!'.encode('ascii', 'ignore').decode('ascii')
'Hola!'

或者,你可以write the file as UTF-8,它可以代表地球上几乎所有的角色。

答案 2 :(得分:0)

当一位用户在this页面上发布时,您应该查看文档中的Unicode教程:https://docs.python.org/2/howto/unicode.html

您正在尝试使用超出ASCII范围的字符,这仅仅是128个符号。我发现了一段非常好的文章,我发现了一段时间,我试图在这里找到并发布。

编辑:啊,这里是:http://www.joelonsoftware.com/articles/Unicode.html

答案 3 :(得分:0)

您正试图在“严格”模式下将unicode转换为ascii:

>>> help(str.encode)
Help on method_descriptor:

encode(...)
    S.encode([encoding[,errors]]) -> object

    Encodes S using the codec registered for encoding. encoding defaults
    to the default encoding. errors may be given to set a different error
    handling scheme. Default is 'strict' meaning that encoding errors raise
    a UnicodeEncodeError. Other possible values are 'ignore', 'replace' and
    'xmlcharrefreplace' as well as any other name registered with
    codecs.register_error that is able to handle UnicodeEncodeErrors.

您可能需要以下某项内容:

s = u'¡Hi there!'

print s.encode('ascii', 'ignore')    # removes the ¡
print s.encode('ascii', 'replace')   # replaces with ?
print s.encode('ascii','xmlcharrefreplace') # turn into xml entities
print s.encode('ascii', 'strict')    # throw UnicodeEncodeErrors