如何在python中替换非ascii char

how to replace non ascii char in python

我需要在python中替换非ascii字符,比如?,但是我得到

1
SyntaxError: Non-ASCII character '\xc2' in file test.py but no encoding declared; see http://www.python.org/peps/pep-0263.html for details`

在遵循网页上的指示后,我得到

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

以下是我的代码:

1
2
data = data.replace(u"?", u"1/2")
data = re.sub(u"?", u"3/4", data, flags=re.DOTALL)

我需要在代码中更改什么?

我的文件是:

1
2
3
4
5
6
#!/usr/bin/python

with codecs.open("file.txt","r","utf8") as myfile:
    data = myfile.read()

data = data.replace(u"?", u"1/2")

文件是:

1
hello world ?


您正在将局部变量data读取为字节,然后将data视为已经是unicode对象。

改变这一点:

1
2
with open(file_name,"r") as myfile:
    data = myfile.read()

对此:

1
2
3
4
import io

with io.open(file_name, encoding="utf8") as myfile:
    data = myfile.read()


我认为您的初始字符串没有正确编码为Unicode。

你正在尝试的工作很好:

1
2
3
>>> st=u"???"
>>> print st.replace(u"?", u"1/2")
?1/2?

但是目标必须是Unicode才能开始。


看起来您希望将其作为Unicode读取,但pyhton将其作为字符串读取。试试这个,这个问题看起来和你的UnicodeDecodeError相似。

https://stackoverflow.com/a/18649608/5504999

< /块引用>

尝试在文件顶部添加#coding: utf-8。这将允许使用非ASCII字符。