如何在python中替换非ascii char

时间:2016-03-22 16:19:28

标签: python python-2.x

我需要在Python中替换像¾这样的非ASCII字符,但我得到了

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

按照指示on the webpage后,我正在

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

这是我的代码:

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

我需要在代码中更改哪些内容?

我的档案是:

#!/usr/bin/python

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

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

file.txt是:

hello world ½

3 个答案:

答案 0 :(得分:0)

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

改变这个:

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

对此:

import io

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

答案 1 :(得分:-1)

看起来你想把它读作unicode但是pyhton把它读成一个字符串。试试这个,问题看起来类似于UnicodeDecodeError

  
    

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

  

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

答案 2 :(得分:-1)

我认为您的初始字符串未正确编码为unicode。

你正在尝试的工作正常:

>>> st=u"¼½¾"
>>> print st.replace(u"½", u"1/2")
¼1/2¾

但是目标需要从unicode开始。