我已经使用Twitter API下载了一堆西班牙推文,但是其中一些带有我不想要的奇怪ANSI字符。 我大约有18000个文件,我想删除这些字符。 我的所有文件都编码为UTF-8。 例如:

b'Me quedo con una frase de nuestra reuni\xc3\xb3n de hoy.'

如果它们是带重音的字符(我们有很多西班牙语),我想删除带重音的字母,并将其替换为非重音版本。 那是因为在那之后我要进行一些文本挖掘分析,并且我想统一单词,因为可能有人不使用重音符号。 我认为b表示处于字节模式。

在以前的情况下,如果我将以下内容放在python中:

print(u'Me quedo con una frase de nuestra reuni\xc3\xb3n de hoy con @Colegas')

我在终端中得到这个:

Me quedo con una frase de nuestra reunión de hoy con @Colegas

我不喜欢它,因为它不是西班牙语中常用的口音。 应该有一个字符ó。 我不明白为什么也不正确。 我也希望文件开头的b消失。 为了对文件进行编码,我使用了以下内容:

f.write(str(FILE.encode('utf-8','strict')))

在那里,我从UTF-8中的某些json创建文件,其中每个推文都包含很多密钥。 也许我应该更改它,或者在那儿做错了。

在某些情况下,尝试在python终端中获取字符时也会出现问题。 例如:

print(u'\uD83D\uDC1F')

我认为这是因为python无法代表这些字符(在上面的示例中)。 是这样吗? 我也想删除它们。

抱歉,如果有一些英语错误,请随时询问是否不清楚。

提前致谢。

编辑:我正在使用Python 3.4

===============>>#1 票数:1 已采纳

您正在混合苹果和橙子。 b'reuni\\xc3\\xb3n'是的UTF-8编码u'reuni\ón' ,这当然是在人类可读的格式团聚

>>> print b'reuni\xc3\xb3n'.decode('utf-8')
reunión
>>> repr(b'reuni\xc3\xb3n'.decode('utf-8'))
"u'reuni\\xf3n'"

此处没有“ ANSI”(反正这是一个错误的名称;通常它是指Windows字符编码,但不一定是您期望的编码)。

至于如何从重音符号中删除重音符号,简称是将其标准化为Unicode“ NFD”表示形式,然后丢弃所有具有“变音符号”分类的代码点。 例如, 在Python Unicode字符串中去除重音符号的最佳方法是什么? ; 为了使该答案独立,这里是该问题答案之一的要点-但请仔细阅读所有答案,以决定最适合您的用例。

import unicodedata
stripped = u"".join([c for c in unicodedata.normalize('NFKD', input_str)
    if not unicodedata.combining(c)])

===============>>#2 票数:1

Python 3中处理传入文本(以bytes形式)的模式之一是在收到它们后立即对其进行解码。

所以你从推特上得到;

In [1]: tweetbytes = b'Me quedo con una frase de nuestra reuni\xc3\xb3n de hoy.'

你也是;

In [2]: tweet = tweetbytes.decode('utf-8')

记住首字母缩写BADTIE; 字节已解码,文本已编码。

现在是文字;

In [3]: type(tweet)
Out[3]: str

您可以这样使用它;

In [4]: print(tweet)
Me quedo con una frase de nuestra reunión de hoy.

===============>>#3 票数:-2

首先:您需要100%确定推特中这些字符的编码语言。 如果您确定它是ANSI(通常西班牙语编码语言为Latin-1),那么从twitter获得的所有内容都需要使用此功能

a = getStufFromTwitter() #you parse twitter 
myStr = a.encode('Latin-1') 

.encode('ANSI')会告诉python,您从外部获取的所有内容均以ANSI编写,他应将其转换为Unicode。

然后,每当要在程序的任何部分重用myStr时(特别是如果要在某处编写它),都必须使用解码功能。 在您的情况下将是:

with open('myfile.txt','w') as f:
    f.write(myStr.decode('UTF-8'))

这应该工作。 但是,如果我们能看到很多代码,将更容易为您提供帮助。 您在Python中有一些非常恶劣的规范(是否正在使用Python 2.7?如果是,请在每个脚本的开头添加以下内容:

from __future__ import unicode_literals 

再一次,它是python的一个非常棘手的部分。

  ask by Ignacio translate from so

未解决问题?本站智能推荐: