Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除奇怪的ANSI字符并使用Python转换重音字符_Python_Encoding_Utf 8_Ansi - Fatal编程技术网

删除奇怪的ANSI字符并使用Python转换重音字符

删除奇怪的ANSI字符并使用Python转换重音字符,python,encoding,utf-8,ansi,Python,Encoding,Utf 8,Ansi,我已经用Twitter API下载了一堆西班牙语推文,但其中一些有奇怪的ANSI字符,我不想在那里看到。我有大约18000个文件,我想删除这些字符。我所有的文件都编码为UTF-8。 例如: b'Me quedo con una frase de nuestra reuni\xc3\xb3n de hoy.' 如果它们是重音字符(西班牙语中有很多),我想删除重音字母,并将其替换为非重音版本。这是因为在那之后,我正在做一些文本挖掘分析,我想统一单词,因为可能有人不使用重音。 我想,b意味着处于字节

我已经用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创建了我的文件,其中包含了每个tweet的很多键。也许我应该改变它,或者我做错了什么

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

print(u'\uD83D\uDC1F')
我认为这是因为python不能表示这些字符(� 在上面的示例中)。是这样吗?我还想删除它们

抱歉,如果有一些英语错误,如果有不清楚的地方,请随时询问

提前谢谢


编辑:我正在使用Python3.4首先:你需要100%确定这些字符是用什么语言在twitter上编码的。如果您确定它是ANSI(通常西班牙语编码语言是拉丁语-1),那么您从twitter获得的所有信息都需要使用此函数

a = getStufFromTwitter() #you parse twitter 
myStr = a.encode('Latin-1') 
.encode('ANSI')将告诉python,您从外部获取的所有内容都是用ANSI编写的,他应该用Unicode进行转换

然后,每当您想在程序的任何部分重新使用myStr时(特别是如果您想在某个地方编写myStr),都必须使用decode函数。在您的情况下,这将是:

with open('myfile.txt','w') as f:
    f.write(myStr.decode('UTF-8'))
这应该行得通。但是,如果我们能够看到大部分代码,那么帮助您就更容易了。Python中有一些非常恶劣的规范(是否使用Python 2.7?如果是,请在每个脚本的开头添加以下内容:

from __future__ import unicode_literals 

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

你在混合苹果和橙子。
b'reuni\xc3\xb3n'
u'reuni\u00f3n'
的UTF-8编码,当然是人类可读格式的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”表示,然后丢弃任何带有“变音符号”的代码点分类。这包括在中,为了使这个答案更加完整,这里是这个问题的一个答案的要点——但是一定要阅读所有答案,如果只是为了决定哪一个最适合你的用例

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

Python3中处理传入文本(以
字节的形式
)的模式之一是在收到文本时立即对其进行解码

所以你从推特上得到

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

In [2]: tweet = tweetbytes.decode('utf-8')
记住首字母缩略词Battie;字节被解码,文本被编码

现在是文本

In [3]: type(tweet)
Out[3]: str
你可以这样使用它

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

问题是我无法从Twitter上再次获取推文。我现在拥有所有推文,但由于Twitter API的限制,我无法再次获取推文。我将这些ansi字符用\u分隔。我刚刚安装了Unidecode 0.04.17,似乎工作正常,但我仍然没有信心,因为我对编码和所有这些方面没有太多了解在stuff中。然后在将它们放入文件之前尝试.decode('Latin-1')。或者.decode('utf-8')。希望这能起到作用,否则,没有太多的信息,这将很难帮助。@Dirty_Fox你不能用Python 3对字节进行
编码。
首字母缩写Battie将帮助你记住;字节被解码,文本被编码。谢谢。我把字节和解码的东西都弄混了。我现在明白了。我用Python尝试了Unidecode软件包,看起来很有趣做同样的事情,我觉得更容易。