python 2.x 中的“编码是无效关键字”错误是不是不可避免?
Posted
技术标签:
【中文标题】python 2.x 中的“编码是无效关键字”错误是不是不可避免?【英文标题】:Is 'encoding is an invalid keyword' error inevitable in python 2.x?python 2.x 中的“编码是无效关键字”错误是否不可避免? 【发布时间】:2014-09-22 20:53:34 【问题描述】:Ansi to UTF-8 using python causing error
我在那里尝试了将 ansi 转换为 utf-8 的答案。
import io
with io.open(file_path_ansi, encoding='latin-1', errors='ignore') as source:
with open(file_path_utf8, mode='w', encoding='utf-8') as target:
shutil.copyfileobj(source, target)
但我得到“TypeError: 'encoding' is an invalid keyword argument for this function”
我试过了
with io.open(file_path_ansi, encoding='cp1252', errors='ignore') as source:
,同样的错误。
然后我尝试了
import io
with io.open(file_path_ansi, encoding='latin-1', errors='ignore') as source:
with io.open(file_path_utf8, mode='w', encoding='utf-8') as target:
shutil.copyfileobj(source, target)
仍然出现同样的错误。我也尝试过使用 cp1252,但得到了同样的错误。
我从几个***问题中了解到
TypeError: 'encoding' is an invalid keyword argument for this function
在 python 2.x 中经常出现错误消息
但主要是回答者建议以某种方式使用 python 3。
在 python 2.x 中真的无法将 ansi txt 转换为 utf-8 txt 吗? (我用的是 2.7)
【问题讨论】:
我怀疑你在两次调用中都使用io.open()
时遇到了同样的错误。请将您的代码 sn-p 转换为完整的程序并重新运行。如果您仍然收到错误,请将整个程序(应该只有 7 行左右)和整个错误输出复制粘贴到您的问题中。
Ansi to UTF-8 using python causing error的可能重复
供参考:Pragmatic Unicode, or, How do I stop the pain?
在 Python 2 中使用 Python 3 构造不可避免地是一个错误,尽管有时没有明确的错误消息。在最坏的情况下,您的代码会运行,但会做错事。您需要了解 Python 2 和 Python 3 之间的区别,然后选择其中一个。 (今后,Py3 是推荐的选择。)
【参考方案1】:
这是在 Python 2 中将 ansi 转换为 utf-8 的方法(您只需使用普通文件对象):
with open(file_path_ansi, "r") as source:
with open(file_path_utf8, "w") as target:
target.write(source.read().decode("latin1").encode("utf8"))
【讨论】:
谢谢.. 但是这段代码和上面的代码有同样的问题。它破坏了非英文字符。我将 drive.google.com/file/d/0B1sEqo7wNB1-Mk5KZFM2SmxtbTA/... 转换为 drive.google.com/file/d/0B1sEqo7wNB1-RzE3VTc0SFhGR1U/... 如您所见,非英语已被破坏。这是因为它是 python 2.7 吗? 这是因为latin-1
不支持非英文字符。
我测试了cp1252
而不是latin1
,我得到了同样的错误。当我使用 notepad++ 打开 ansi txt 文件时,我正确地看到了那些非英文字符。所以我认为 Python 也可以阅读这些非英语的,即使它是 ansi。但是没有办法吗?
如果有非英文字符,那么你的文件不是 ansii(或 latin1)。
嗯.. 但是当我在记事本++中转到“编码”时,我看到“ANSI”被选中。【参考方案2】:
对于 Python2.7,在两个位置都使用 io.open()
。
import io
import shutil
with io.open('/etc/passwd', encoding='latin-1', errors='ignore') as source:
with io.open('/tmp/goof', mode='w', encoding='utf-8') as target:
shutil.copyfileobj(source, target)
上面的程序在我的电脑上运行没有错误。
【讨论】:
谢谢!也许我在尝试 io 时犯了一些错误。您的代码没有导致任何错误消息。但是一旦我在记事本++中打开输出,非英文字符都被破坏了。我检查了 latin-1 和 cp1252。 我把drive.google.com/file/d/0B1sEqo7wNB1-Mk5KZFM2SmxtbTA/…转给drive.google.com/file/d/0B1sEqo7wNB1-RzE3VTc0SFhGR1U/… 可以看到,非英文的已经断了。这是因为它是 python 2.7 吗? 对于仍然支持旧版本的任何人,open
(以及io
模块的其余部分)的启用编码变体是introduced in Python 2.6。对于 2/3 代码兼容性,it's still in Python 3,它只是内置 open
函数的别名。【参考方案3】:
当我尝试将字节写入文件时,我遇到了同样的问题。 所以我的意思是,字节已经编码。因此,当您使用编码关键字时,这会导致错误。
【讨论】:
【参考方案4】:TypeError: 'encoding' 是该函数的无效关键字参数
open('textfile.txt', encoding='utf-16')
使用io,2.7和3.6 python版本都可以使用
import io
io.open('textfile.txt', encoding='utf-16')
【讨论】:
以上是关于python 2.x 中的“编码是无效关键字”错误是不是不可避免?的主要内容,如果未能解决你的问题,请参考以下文章