2019年4月18日星期四

UTF-8格式的csv文件用Office打开乱码

我在Linux平台下用C语言开发的一个程序,需要和系统的其他组成部分交互数据,另一部分是用C#语言开发的程序。双方约定使用UTF-8格式的csv文件传递数据。
我这边使用fprintf, fputs等参数直接把要写入的数据以指定的格式和UTF-8编码存入csv文件中。在终端下使用cat命令显示csv文件内容是正确的,编码确实是UTF-8。但是如果用Excel打开这个csv文件却是乱码,对方用C#的相关库解析文件也无法解析。只有用Excel的导入功能,在导入向导中选择编码为UTF-8, 才能正确显示数据。
后来经过研究得知,UTF-8格式的文本文件(csv文件也属于文本文件范畴),可以在文件的开头添加三个字节——0xEF, 0xBB, 0xBF. 这三个字节称为“签名”或者BOM. 一些比较高级的文本编辑器在保存文件的时候可以选择“带BOM的UTF-8”或者“带签名的UTF-8". 这样Excel和C#的解析库就不会把文件识别为乱码了。
对于fprintf,fputs等函数来说,可以在第一次向文件写数据的时候,写做
fputs("\xef\xbb\xbf地址,ID\n", fp);
这样就添加了BOM.

没有评论:

发表评论