.py文件中的西班牙文本

时间:2011-05-30 17:00:02

标签: python character-encoding

这是代码

A = "Diga sí por cualquier número de otro cuidador.".encode("utf-8")

我收到此错误:

'ascii'编解码器无法解码位置6中的字节0xed:序数不在范围内(128)

我尝试了许多编码失败。

修改

我在开头已经有了这个

# -*- coding: utf-8 -*-

更改为

A = u"Diga sí por cualquier número de otro cuidador.".encode("utf-8")

无效

7 个答案:

答案 0 :(得分:4)

您使用的是Python 2吗?

在Python 2中,该字符串文字是一个字节串。您正在尝试对其进行编码,但您只能编码Unicode字符串,因此Python将首先尝试使用默认的“ascii”编码将字节字符串解码为Unicode字符串。

不幸的是,您的字符串包含非ASCII字符,因此无法将其解码为Unicode。

最佳解决方案是使用Unicode字符串文字,如下所示:

A = u"Diga sí por cualquier número de otro cuidador.".encode("utf-8")

答案 1 :(得分:3)

错误讯息:'ascii' codec can't decode byte 0xed in position 6: ordinal not in range(128)

表示第7个字节为0xed。这是UTF-8序列的第一个字节,用于某些(可能是CJK)高序Unicode字符(这与报告的事实完全不一致),或者它是您在Latin1或cp1252中的i-acute编码。我打赌cp1252。

如果您的文件是以UTF-8编码的,则违规字节不是0xed而是0xc3

Preliminaries:
>>> import unicodedata
>>> unicodedata.name(u'\xed')
'LATIN SMALL LETTER I WITH ACUTE'
>>> uc = u'Diga s\xed por'

What happens if file is encoded in UTF-8:
>>> infile = uc.encode('utf8')
>>> infile
'Diga s\xc3\xad por'
>>> infile.encode('utf8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 6: ordinal not in range(128)
#### NOT the message reported in the question ####

What happens if file is encoded in cp1252 or latin1 or similar:
>>> infile = uc.encode('cp1252')
>>> infile
'Diga s\xed por'
>>> infile.encode('utf8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xed in position 6: ordinal not in range(128)
#### As reported in the question ####

在代码开头有# -*- coding: utf-8 -*-并不能神奇地确保您的文件以UTF-8编码 - 这取决于您和您的文本编辑器。

行动:

  1. 将您的文件另存为UTF-8。
  2. 作为 别人建议,你需要你 嗒嗒'

答案 2 :(得分:1)

将代码放在第一行:

# -*- coding: utf-8 -*-

答案 3 :(得分:0)

您应该通过在代码的最开头添加以下行来指定源文件的编码(假设您的文件以UTF-8编码):

# Encoding: UTF-8

否则,Python将采用ASCII编码并在解析过程中失败。

答案 4 :(得分:0)

您可能使用普通字符串,而不是unicode字符串:

>> type(u"zażółć gęślą jaźń")
-> <type 'unicode'>

>> type("zażółć gęślą jaźń")
-> <type 'str'>

所以

u"Diga sí por cualquier número de otro cuidador.".encode("utf-8")

应该有效。

如果你想默认使用unicode字符串,请输入

# -*- coding: utf-8 -*-

在脚本的第一行。

另见docs

P.S。在上面的例子中它是波兰语:)

答案 5 :(得分:0)

在代码的第一行或第二行中,输入注释:

    # -*- coding: latin-1 -*-

有关支持的符号列表,请参阅: http://en.wikipedia.org/wiki/Latin-1_Supplement_%28Unicode_block%29

涵盖的语言:http://en.wikipedia.org/wiki/ISO_8859-1

答案 6 :(得分:0)

也许这就是你想要做的事情:

A = 'Diga sí por cualquier número de otro cuidador'.decode('latin-1')

不要忘记在代码的开头添加# -*- coding: latin-1 -*-