我需要一些帮助。我正在写一个程序,打开2个UTF-8编码的源文件,没有BOM。第一个包含英语文本和一些其他信息,包括ID。第二个只包含字符串ID和翻译。该程序通过将第二个文件中的英文字符替换为俄语翻译来更改第一个文件中的每个字符串,并将这些字符串写入输出文件。一切似乎都很好。但有BOM出现在目标文件.我想创建文件没有BOM,像源.我打开文件与fopen函数在文本模式与ccs=UTF-8读取字符串与fgetws函数wchar_t缓冲区和写入与fputws函数输出文件
k5ifujac1#
不要使用文本模式,不要使用fopen的MS ccs=扩展,也不要使用fputws。而是使用二进制模式的fopen,并自己编写正确的UTF-8。
fopen
ccs=
fputws
llycmphe2#
对于一个新的文件,没有办法阻止字节顺序标记的创建。但是,您可以在创建文件后立即倒带。输出将是UTF8编码,没有BOM。
FILE* fp = NULL; _wfopen_s(&fp, sfn, L"wt, ccs=UTF-8"); fseek(fp, 0L, SEEK_SET); // rewind to overwrite EF BB BF (UTF-8 BOM)
2条答案
按热度按时间k5ifujac1#
不要使用文本模式,不要使用
fopen
的MSccs=
扩展,也不要使用fputws
。而是使用二进制模式的fopen
,并自己编写正确的UTF-8。llycmphe2#
对于一个新的文件,没有办法阻止字节顺序标记的创建。但是,您可以在创建文件后立即倒带。输出将是UTF8编码,没有BOM。