python UnicodeDecodeError:“ utf8”编解码器无法解码字节

时间:2019-10-28 16:10:52

标签: python c++ json utf-8

我正在尝试创建一个以UTF-8编码的C ++文件。实际上,当我尝试创建这样的文件时:

#include <fstream>
#include <iostream>

int main() {
    std::ofstream myfile("test.json");
    myfile << "{\"test\":\"é\"}";
    myfile.close();
}

然后python无法将其解码为UTF-8,我必须使用ISO-8859-1对其进行解码:

import json
import codecs

with codecs.open('test.json', encoding='ISO-8859-1') as json_file:
    data = json.load(json_file)
print(data)

当我将编码设置为utf8时,出现错误:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 0: unexpected end of data

如何使此文件使用C ++进行UTF-8编码?我真的需要此文件为UTF-8,而不是ISO-8859-1。

我还尝试使用Vim(而不是c ++)创建json,并且有效。

1 个答案:

答案 0 :(得分:0)

您需要配置文本编辑器/ IDE。

C ++只是将字节写入输出文件,而这些字节采用您在源代码中编写的文本形式(因为数据是字符串文字)。因此,它们具有您的文本编辑器/ IDE指定的编码。确保设置为UTF-8。

目前,您的编辑器似乎已配置为编写其他编码。然后,当尝试从结果中解码UTF-8代码点时,Python脚本遇到了一些不同的情况并告诉您有关情况。

当您将编辑器更改为Vim时,您的解决方案有效。

或者,您可以将其设置为UTF-8字符串文字(u8"é")。如果源文件不是 UTF-8,这应该会在内部触发重新编码,尽管我不确定在现代生态系统中该文件在何种程度上可靠地工作。