Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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
Python 如何将unicode更改为ascii并删除无法识别的字符_Python_String_Unicode_Ascii_Unicode String - Fatal编程技术网

Python 如何将unicode更改为ascii并删除无法识别的字符

Python 如何将unicode更改为ascii并删除无法识别的字符,python,string,unicode,ascii,unicode-string,Python,String,Unicode,Ascii,Unicode String,我的文件是unicode格式的。但是,出于某种原因,我想将其更改为纯ascii,同时删除ascii中无法识别的任何字符。例如,我想更改u'这是一个字符串�'只需“这是一个字符串”。下面是我用来这样做的代码 ascii_str = unicode_str.encode('ascii', 'ignore') 然而,我仍然得到以下恼人的错误 UnicodeDecodeError: 'ascii' codec can't decode byte 0xf3 in position 0: ordin

我的文件是unicode格式的。但是,出于某种原因,我想将其更改为纯ascii,同时删除ascii中无法识别的任何字符。例如,我想更改
u'这是一个字符串�'
只需
“这是一个字符串”
。下面是我用来这样做的代码

ascii_str = unicode_str.encode('ascii', 'ignore')
然而,我仍然得到以下恼人的错误

UnicodeDecodeError: 'ascii' codec can't decode byte 0xf3 in position 0: 
  ordinal not in range(128)

我怎样才能解决这个问题?我可以使用普通的ascii字符串

你需要解码它。如果你有文件

with open('example.csv', 'rb') as f:
    csv = f.read().decode("utf-8")
如果你想解码一个字符串,你可以这样做

data.decode('UTF-8')
更新 您可以使用
ord()
获取每个字符的ascii码

d=u'This is a string'
l=[ord(s) for s in d.encode('ascii', 'ignore')]
print l
如果需要连接它们,可以使用
join

打印“”连接(l)


你需要解码它。如果你有文件

with open('example.csv', 'rb') as f:
    csv = f.read().decode("utf-8")
如果你想解码一个字符串,你可以这样做

data.decode('UTF-8')
更新 您可以使用
ord()
获取每个字符的ascii码

d=u'This is a string'
l=[ord(s) for s in d.encode('ascii', 'ignore')]
print l
如果需要连接它们,可以使用
join

打印“”连接(l)

由于字符串中有一个符号(特殊表中代码点U+FFFD处的Unicode标准中的一个符号),因此需要在解码前为解释器指定该符号,具体如下:

由于字符串中有一个符号(特殊表中代码点U+FFFD处的Unicode标准中的一个符号),因此需要在解码前为解释器指定该符号,具体如下:


我假设您的
unicode\u str
是一个真正的unicode字符串

>>> u"\xf3".encode("ascii", "ignore")
''
如果没有,就用这个

>>> "\xf3".decode("ascii", "ignore").encode("ascii")
最好的方法总是找出你处理的编码,然后解码。因此,您有一个格式正确的unicode字符串。这意味着从
unicode\u str
开始,要么是一个真正的unicode字符串,要么用右键读取。我假设有一个文件。因此,最好的办法是:

import codecs
f = codecs.open('unicode.rst', encoding='utf-8')
for line in f:
    print repr(line)
>>> import string
>>> a = "abc\xf3abc"
>>> "".join(b for b in a if b in string.printable)
'abcabc'
另一个绝望的办法是:

import codecs
f = codecs.open('unicode.rst', encoding='utf-8')
for line in f:
    print repr(line)
>>> import string
>>> a = "abc\xf3abc"
>>> "".join(b for b in a if b in string.printable)
'abcabc'

我假设您的
unicode\u str
是一个真正的unicode字符串

>>> u"\xf3".encode("ascii", "ignore")
''
如果没有,就用这个

>>> "\xf3".decode("ascii", "ignore").encode("ascii")
最好的方法总是找出你处理的编码,然后解码。因此,您有一个格式正确的unicode字符串。这意味着从
unicode\u str
开始,要么是一个真正的unicode字符串,要么用右键读取。我假设有一个文件。因此,最好的办法是:

import codecs
f = codecs.open('unicode.rst', encoding='utf-8')
for line in f:
    print repr(line)
>>> import string
>>> a = "abc\xf3abc"
>>> "".join(b for b in a if b in string.printable)
'abcabc'
另一个绝望的办法是:

import codecs
f = codecs.open('unicode.rst', encoding='utf-8')
for line in f:
    print repr(line)
>>> import string
>>> a = "abc\xf3abc"
>>> "".join(b for b in a if b in string.printable)
'abcabc'

print repr(unicode\u str)
也请发布完整的回溯查看我的解决方案。我认为使用正确的编码读取文件(如果有?)是处理该问题的最佳起点。我强烈建议使用此库将Unicode转换为ASCII:
print repr(Unicode_str)
也请发布完整的回溯查看我的解决方案。我认为用正确的编码读取文件(如果有?)是处理这一问题的最佳起点。我强烈建议使用此库将Unicode转换为ASCII:解码后,如何将其转换为ASCII并忽略ASCII无法识别的字符?@metallicpart您可以使用ord()获取每个字符的ascii码。我已经更新了帖子。解码后,如何将其转换为ascii并忽略ascii无法识别的字符?@MetallicPrist您可以使用ord()获取每个字符的ascii代码。我已经更新了帖子。错误消息表示解码错误,而不是编码错误。这是错误。错误消息表示解码错误,而不是编码错误。