就是我现在有一是Erlang写入数据的csv文件,文件的格式utf8 without bom 在linux下中文可以正确显示,结果拿到window下用Excel打开,中文乱码,然后我把utf8 without bom文件换为带bom的utf8文件,结果就中文就正确显示,问题是怎么用Erlang写带bom的utf8文件
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Erlang中直接写入带有BOM(Byte Order Mark)的UTF-8文件需要手动添加BOM头到文件的开始。UTF-8的BOM是三个字节序列:0xEF, 0xBB, 0xBF
。以下是一个简单的示例,展示如何使用Erlang来实现这一操作:
%% 打开文件,准备写入,这里以二进制模式打开
{ok, File} = file:open("your_file.csv", [write, binary]).
%% 写入BOM头
file:write(File, <<239,187,191>>).
%% 假设你的CSV数据已经以字符串形式存在,比如Data
Data = "字段1,字段2,字段3\n值1,值2,中文值\n".
%% 将数据转换为二进制并写入文件
file:write(File, unicode:characters_to_binary(Data)).
%% 关闭文件
file:close(File).
这段代码首先以二进制模式打开文件,然后写入UTF-8的BOM头,接着将你的CSV数据转换为二进制格式写入文件。注意,这里使用了unicode:characters_to_binary/1
函数来确保数据正确地从Erlang字符列表转换为二进制格式,这对于包含非ASCII字符(如中文字符)的数据尤为重要。
请根据你的实际需求调整文件名和数据内容。这样处理后,生成的CSV文件在Windows下用Excel打开时应该能正确显示中文了。