我正在尝试创建一个以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,并且有效。
答案 0 :(得分:0)
您需要配置文本编辑器/ IDE。
C ++只是将字节写入输出文件,而这些字节采用您在源代码中编写的文本形式(因为数据是字符串文字)。因此,它们具有您的文本编辑器/ IDE指定的编码。确保设置为UTF-8。
目前,您的编辑器似乎已配置为编写其他编码。然后,当尝试从结果中解码UTF-8代码点时,Python脚本遇到了一些不同的情况并告诉您有关情况。
当您将编辑器更改为Vim时,您的解决方案有效。
或者,您可以将其设置为UTF-8字符串文字(u8"é"
)。如果源文件不是 UTF-8,这应该会在内部触发重新编码,尽管我不确定在现代生态系统中该文件在何种程度上可靠地工作。