GVKun编程网logo

致命的python错误的原因可能是什么:initfsencoding:无法加载文件系统编解码器?

25

本文将带您了解关于致命的python错误的原因可能是什么:initfsencoding:无法加载文件系统编解码器?的新内容,另外,我们还将为您提供关于c#–Encoding.UTF8.GetStrin

本文将带您了解关于致命的python错误的原因可能是什么:initfsencoding:无法加载文件系统编解码器?的新内容,另外,我们还将为您提供关于c# – Encoding.UTF8.GetString和Encoding.UTF8.GetBytes彼此不相反的原因是什么?、pyinstaller制作的可执行文件遇到“致命的python错误:initfsencoding”、Python 3 UnicodeEncodeError:’ascii’编解码器无法编码字符、Python 3:os.walk()文件路径UnicodeEncodeError:'utf-8'编解码器无法编码:不允许代理的实用信息。

本文目录一览:

致命的python错误的原因可能是什么:initfsencoding:无法加载文件系统编解码器?

致命的python错误的原因可能是什么:initfsencoding:无法加载文件系统编解码器?

我正在使用Python 3.7(64位)并安装了 cx_Freeze, 用于将.py转换为.exe。

我使用以下命令提示符将Python脚本转换为可执行文件:

python [filename] build

它成功构建了可执行文件。但是当我执行我的EXE文件时,我只是得到输出:

致命的python错误:initfsencoding:无法加载文件系统编解码器
ImportError:’encoding’
当前线程0X000013f8中的无效标志1530052318:

如何解决它并使用 cx_Freeze 成功制作可执行文件?

答案1

小编典典

固定在4c18633中。问题在于,对于python
3.7的x64版本,由于的类config而无法正常工作freezer.py。您需要进入cx_Freezer安装文件夹。如果您有虚拟环境,请转到环境文件夹\lib\site-packages\cx_Freeze,找到freezer.py并添加在提交中找到的代码。

您可以在GitHub上找到补丁

c# – Encoding.UTF8.GetString和Encoding.UTF8.GetBytes彼此不相反的原因是什么?

c# – Encoding.UTF8.GetString和Encoding.UTF8.GetBytes彼此不相反的原因是什么?

可能我错过了一些东西,但我不明白为什么Encoding.UTF8.GetString和Encoding.UTF8.GetBytes不能互相转换?

在以下示例中,myOriginalBytes和asBytes不相等,即使它们的长度不同.谁能解释我错过了什么?

byte[] myOriginalBytes = GetRandomByteArray();
var asstring = Encoding.UTF8.GetString(myOriginalBytes);
var asBytes = Encoding.UTF8.GetBytes(asstring);

解决方法

如果你从一个有效的UTF-8字节序列开始,它们就会反转,但如果你只是从一个任意字节序列开始它们就不会.

让我们来看一个具体而简单的例子:单个字节0xff.这不是任何文本的有效UTF-8编码.所以如果你有:

byte[] bytes = { 0xff };
string text = Encoding.UTF8.GetString(bytes);

…你最终将文本作为单个字符,U+FFFD,“Unicode替换字符”,用于表示解码二进制数据时出错.对于任何无效序列,您最终会得到替换字符 – 例如,如果以0x80开头,则会获得相同的文本.显然,如果多个二进制输入被解码为相同的文本输出,则它不可能是完全可逆的变换.

如果您有任意二进制数据,则不应使用Encoding从中获取文本 – 您应该使用Convert.ToBase64String或者hex.编码用于自然文本的数据.

如果你走向相反的方向,像这样:

string text = GetRandomText();
byte[] bytes = Encoding.UTF8.GetBytes(text);
string text2 = Encoding.UTF8.GetString(bytes);

…我希望text2等于文本,除了你有无效文本的奇怪情况,例如与“一半”代理对.

pyinstaller制作的可执行文件遇到“致命的python错误:initfsencoding”

pyinstaller制作的可执行文件遇到“致命的python错误:initfsencoding”

我可以通过崇高的文本在我的PC上运行python(python 3.7)程序。该程序使用tkinter和sqlite3。pyinstaller不支持它们吗?

运行它时出现的错误(只需双击在中创建的文件dist

Fatal Python error: initfsencoding: unable to load the file system codec 
zipimport.ZipImportError: can't find module 'encodings'

如果有人对此有任何经验,将不胜感激!

如果问题可能出在代码本身中,我可以发布代码。

Python 3 UnicodeEncodeError:’ascii’编解码器无法编码字符

Python 3 UnicodeEncodeError:’ascii’编解码器无法编码字符

我刚刚开始学习 Python,但我已经遇到了麻烦.
我有一个只有一个命令的简单脚本:
#!/usr/bin/env python3
print("Příliš žluťoučký kůň úpěl ďábelské ódy.") # Text in Czech

当我尝试运行此脚本时:

python3 hello.py

我收到这条消息:

Traceback (most recent call last):
  File "hello.py",line 2,in <module>
    print("P\u0159\xedli\u0161 \u017elu\u0165ou\u010dk\xfd k\u016fn \xfap\u011bl \u010f\xe1belsk\xe9 \xf3dy.")
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-2: ordinal not in range(128)

我正在使用Kubuntu 16.04和Python 3.5.2.
当我尝试这个:导出PYTHONIOENCODING = utf-8它只能暂时工作.下次我打开bash时遇到了同样的错误.

根据https://docs.python.org/3/howto/unicode.html#the-string-type
Python源代码的默认编码是UTF-8.
所以我把源文件保存为id UTF-8,Konsole设置为UTF-8但我仍然得到错误!
即使我补充说

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

从一开始它什么都不做.

另一个奇怪的事情:当我只使用python而不是python3运行它时,它可以工作.如何在Python 2.7.12中工作而不是在3.5.2中工作?

永久解决这个问题的任何想法?谢谢.

解决方法

感谢Mark Tolen和Alastair McCormack建议问题所在.问题出在区域设置中.
当我运行语言环境时,输出是:
LANG=C
LANGUAGE=
LC_CTYPE="C"
LC_NUMERIC=cs_CZ.UTF-8
LC_TIME=cs_CZ.UTF-8
LC_COLLATE=cs_CZ.UTF-8
LC_MONETARY=cs_CZ.UTF-8
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT=cs_CZ.UTF-8
LC_IDENTIFICATION="C"
LC_ALL=

此“C”是使用ANSI charmap的默认设置.这就是问题所在.运行locale charmap给了我:ANSI_X3.4-1968,它不能显示非英文字符.
我用这个Ubuntu documentation site解决了这个问题.

我将这些行添加到/ etc / default / locale:

LANGUAGE=cs_CZ.UTF-8
LC_ALL=cs_CZ.UTF-8

然后,您必须重新启动会话(注销并进入)才能应用这些设置.

运行语言环境现在返回此输出:

LANG=C
LANGUAGE=cs
LC_CTYPE="cs_CZ.UTF-8"
LC_NUMERIC="cs_CZ.UTF-8"
LC_TIME="cs_CZ.UTF-8"
LC_COLLATE="cs_CZ.UTF-8"
LC_MONETARY="cs_CZ.UTF-8"
LC_MESSAGES="cs_CZ.UTF-8"
LC_PAPER="cs_CZ.UTF-8"
LC_NAME="cs_CZ.UTF-8"
LC_ADDRESS="cs_CZ.UTF-8"
LC_TELEPHONE="cs_CZ.UTF-8"
LC_MEASUREMENT="cs_CZ.UTF-8"
LC_IDENTIFICATION="cs_CZ.UTF-8"
LC_ALL=cs_CZ.UTF-8

并运行locale charmap返回:

UTF-8

Python 3:os.walk()文件路径UnicodeEncodeError:'utf-8'编解码器无法编码:不允许代理

Python 3:os.walk()文件路径UnicodeEncodeError:'utf-8'编解码器无法编码:不允许代理

如何解决Python 3:os.walk()文件路径UnicodeEncodeError:''utf-8''编解码器无法编码:不允许代理?

在Linux上,文件名只是“一堆字节”,不一定以特定的编码进行编码。Python 3尝试将所有内容转换为Unicode字符串。通过这样做,开发人员想出了一种方案,可以将字节字符串转换为Unicode字符串,然后又将其转换回去而不会丢失,也不会知道原始编码。他们使用部分替代来编码“坏”字节,但是普通的UTF8编码器在打印到终端时无法处理它们。

例如,这是一个非UTF8字节的字符串:

>>> b''C\xc3N''.decode(''utf8'',''surrogateescape'')
''C\udcc3N''

它可以与Unicode相互转换而不会丢失:

>>> b''C\xc3N''.decode(''utf8'',''surrogateescape'').encode(''utf8'',''surrogateescape'')
b''C\xc3N''

但是无法打印:

>>> print(b''C\xc3N''.decode(''utf8'',''surrogateescape''))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: ''utf-8'' codec can''t encode character ''\udcc3'' in position 1: surrogates not allowed

您必须弄清楚要使用非默认编码的文件名要做什么。也许只是将它们编码回原始字节,然后用未知替换将其解码。使用它进行显示,但保留原始名称以访问文件。

>>> b''C\xc3N''.decode(''utf8'',''replace'')
C�N

os.walk 也可以采用字节字符串,并返回字节字符串而不是Unicode字符串:

for p,d,f in os.walk(b''.''):

然后,您可以根据需要进行解码。

解决方法

这段代码:

for root,dirs,files in os.walk(''.''):
    print(root)

给我这个错误:

UnicodeEncodeError: ''utf-8'' codec can''t encode character ''\udcc3'' in position 27: surrogates not allowed

如何遍历文件树而不会得到像这样的有害字符串?

今天关于致命的python错误的原因可能是什么:initfsencoding:无法加载文件系统编解码器?的介绍到此结束,谢谢您的阅读,有关c# – Encoding.UTF8.GetString和Encoding.UTF8.GetBytes彼此不相反的原因是什么?、pyinstaller制作的可执行文件遇到“致命的python错误:initfsencoding”、Python 3 UnicodeEncodeError:’ascii’编解码器无法编码字符、Python 3:os.walk()文件路径UnicodeEncodeError:'utf-8'编解码器无法编码:不允许代理等更多相关知识的信息可以在本站进行查询。

本文标签: