【背景】今天要做一个数据导出的小需求,通过php将数据库中的数据查询出来,写入到csv(Comma-Separated Values)中。由于程序运行在linux环境上,通过sercureCRT将文件下载到window,打开后中文全部乱码,下面讲述如何定位问题并解决问题的。
【分析】
1. 将linux上生成的resutl.csv文件下载到window,打开乱码。通过记事本打开有内容不乱码,将内容复制到另外一个记事本中,修改为csv格式打开不乱码。因此极有可能是linux生成的文件和window下新建文件的编码格式不一致。
2. 记原始linux生成的csv文件为result_bad.csv,记在window下新建文件并通过粘贴内容形成的文件为result_good.csv,将两个文件上传到linux环境,通过命令:xxd result_bad.csv, xxd result_good.csv,比较两个的内容,会发现在出现中文的地方两者不一致:
举例:
对result_bad.csv文件:
0000050: 2c22 e9ab 98e6 a1a5 e699 b622 0d0a 2237 ,".........".."7 =>中文对应编码为:e9ab 98e6 a1a5 e699 b6

在Linux环境中,通过PHP生成的CSV文件在Windows下打开显示乱码。问题可能在于编码格式不一致,Linux生成的是UTF8,而Windows默认使用GBK。解决方案是在PHP代码中使用iconv将UTF8转换为GB2312,然后在Windows中用Excel打开即可正常显示。
最低0.47元/天 解锁文章
2690

被折叠的 条评论
为什么被折叠?



