Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.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文件写入显示UnicodeError的错误_Python_Utf 8_Encode_Shift Jis - Fatal编程技术网

python文件写入显示UnicodeError的错误

python文件写入显示UnicodeError的错误,python,utf-8,encode,shift-jis,Python,Utf 8,Encode,Shift Jis,我需要制作cp932(它是扩展的shift-jis) UnicodeEncodeError:'cp932'编解码器无法对位置0中的字符'\u270c'进行编码:非法的多字节序列 import codecs mytext = '\u270c' with codecs.open(path,mode='w',encoding='cp932') as f: mytext.encode('cp932',"ignore") f.write(mytext

我需要制作cp932(它是扩展的
shift-jis

UnicodeEncodeError:'cp932'编解码器无法对位置0中的字符'\u270c'进行编码:非法的多字节序列

    import codecs
    mytext = '\u270c'
    with codecs.open(path,mode='w',encoding='cp932') as f:
        mytext.encode('cp932',"ignore")
        f.write(mytext)
    exit()
我只是简化了本文的
mytext

我认为这个字符通过了忽略flg的编码

但是,
write
显示错误


有没有办法解决这个问题???

\
是cp932中的功能符号。因此,如果你想编码
\
,你应该使用
\\

就你而言:

import codecs
mytext = '\\u270c'
with codecs.open(path,mode='w',encoding='cp932') as f:
    mytext.encode('cp932',"ignore")
    f.write(mytext)
exit()

在您的示例中,文件
f
希望Unicode字符串被传递到
f.write()
,并且它们将按照
codecs.open
的声明进行编码,因此代码尝试双重编码。另外,
'\u270c'
不是CP932支持的字符,因此在任何情况下都不能写入CP932文件

假设Python 3以特定编码编写Unicode字符串
文本
,请使用:

with open('output.txt','w',encoding='cp932') as f:
    f.write(text)

编解码器
是一个较旧的模块,不需要。在Python2中,
io.open
是与Python3的
open
等效的后端口,为了便于移植,Python3也支持它。

即使没有编解码器,代码也可以在我的计算机上正常工作。请在
open()
函数中输入
errors='ignore'
标志。注意:您的语句
mytext.encode(…)
丢弃返回值<代码>mytext未更改。
cp932
不支持
“\u270c”
(胜利之手,✌).
'\u270c'
'\\u270c'
是两个不同的东西。@lenz我不明白你的意思…那代码是他的意图。编码和转义不是一回事。OP问到编码,你说的是转义。
'\u270c'
是一个单字符字符串,但当你转义为
时反斜杠\\u270c'
,您将得到一个包含六个字符的字符串–选中
len('\u270c')、len('\\u270c')
。当您对任意一个字符串进行编码时,您将得到一个
bytes
对象(不再是
str
);长度取决于选择的编码。哦,我不知道有什么区别……我还是个初学者。我为自己感到羞愧。谢谢你,伦茨。