gpt4 book ai didi

python - 为什么 `toml.load(f)` 在 Windows 下此文件失败(但在 Linux 上则不然)?

转载 作者:行者123 更新时间:2023-12-03 11:09:28 24 4
gpt4 key购买 nike

我有一个TOML我想用 this script 处理的文件.

这曾经在 Linux 下工作得很好。在 Windows 下(Python 3.6.5 |Anaconda, Inc.|(默认,2018 年 3 月 29 日,13:23:52)[MSC v.1900 32 位(Intel)] on win32)我得到以下错误:

Need to process 1 file(s)
Processing file test01.toml (1 of 1)
Traceback (most recent call last):
File "py/process.py", line 27, in <module>
add_text_fragment(input_dir + "/" + file)
File "<string>", line 10, in add_text_fragment
File "C:\Users\1\Anaconda3\lib\site-packages\toml\decoder.py", line 134, in lo
ad
return loads(f.read(), _dict, decoder)
File "C:\Users\1\Anaconda3\lib\encodings\cp1251.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x98 in position 985: char
acter maps to <undefined>

我假设错误发生在此处:

f = open(toml_file_name, "r")
pt = toml.load(f)
f.close()

根据 NotePad++,file 有问题的编码是 UTF-8。

如何修复它?

赏金条款

我会将这笔赏金奖励给向我展示如何确保脚本 process.py 的人正确处理 input file , 我。 e.执行超过 addTextFragment.py 中以 If at this point pt 开头的注释

def add_text_fragment(toml_file_name):
f = open(toml_file_name, "r")
pt = toml.load(f)
f.close()

# If at this point pt contains dthe data of the input file,
# then you have attained the goal.
if (pt["type"] == "TA"):

变量pt包含来自input file的数据.

您的解决方案必须在 Windows 10、Python 3.7.6 (默认,2020 年 1 月 8 日,20:23:39)下运行 [MSC v.1916 64 位 (AMD64)]::Anaconda, Inc. on win32 .

注意:process.py 对特定目录中的所有文件执行 addTextFragment.py

最佳答案

只需替换这一行:

f = open(toml_file_name, "r")

与:

f = open(toml_file_name, "r", encoding="utf-8")

正如您在错误消息中看到的,Python 正在尝试使用文件的默认系统编码来读取该文件 - 如果该文件包含任何非 ASCII 字符并且在 Linux 中工作,这意味着它具有不同的编码 - 所有非 Windows 世界的默认编码是 utf-8 。

关于python - 为什么 `toml.load(f)` 在 Windows 下此文件失败(但在 Linux 上则不然)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60631386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com