`
rensanning
  • 浏览: 3513320 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:37464
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:604269
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:677956
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:87221
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:399787
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69055
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:90447
社区版块
存档分类
最新评论

Excel打开CSV文件乱码的问题

 
阅读更多
系统管理功能中,很多时候需要导入导出数据,基本上采用的也都是CSV文件的形式(Excel读入还是比较麻烦)。由于字符集的问题,大部分都采用UTF-8编码。

CSV文件的默认打开方式是Excel,但双击UTF-8编码的CSV文件时,Excel是不能正常显示数据的,会乱码。这是做管理页面一个很常见的问题。
原因:
Excel本身是对应了UTF-8编码的,但当CSV文件是UTF-8编码时,原封不动的双击打开CSV文件时,Excel是无法识别为UTF-8的,而是按照系统默认字符ANSI(简体中文GB2312、日文Shift_JIS)来处理的就乱码了。所以根本原因是Excel字符集识别的问题。




三种方法:

(1)把CSV文件的编码变换为系统字符集(UTF-8 -> GB2312/Shift_JIS)

这是最简单的方法。大部分文本编辑器都有“另存为”功能,保存时选择字符集。

问题:编码变换后,会有一些特殊字符无法支持。

(2)通过Excel读入外部数据

不需要改变编码,启动Excel,数据->自文本,选择 CSV 文件。
出现文本导入向导,选择 65001 : Unicode (UTF-8)、分隔符号选择逗号后导入数据即可。但每次导入比较麻烦。

问题:不支持换行的数据。

(3)采用UTF-8带BOM的编码

上边两种方法都不是根本的解决方法,都需要用户自己处理CSV文件,所以根本问题还是如何让Excel识别UTF-8编码。
方法是通过添加BOM可以使Excel识别文件为UTF-8编码。

BOM:Byte-Order Mark
https://en.wikipedia.org/wiki/Byte_order_mark

带BOM的文件会比不带BOM的文件多出3个字节,这三个字节是固定的:0xEF 0xBB 0xBF,其Unicode为\uFEFF。



FileOutputStream fos = new FileOutputStream("D:\\Test1.csv");  
fos.write( 0xef );
fos.write( 0xbb );
fos.write( 0xbf );
BufferedWriter bw = new BufferedWriter( new OutputStreamWriter( fos, "UTF8" ));
bw.write("a,b,c,d\r\n");
bw.close();
fos.close();



也可以通过65279实现。
FileOutputStream fos = new FileOutputStream("D:\\Test2.csv");
PrintWriter pw = new PrintWriter(new OutputStreamWriter(fos, "UTF8"), true);
pw.print((char)65279);
pw.print("e,f,g,h\r\n");
pw.flush();
pw.close();
fos.close();



这种方法能够避免变换编码引起的特殊字符不支持,也不需要很麻烦的导入数据,也可以对应改行数据。当然通过大部分文本编辑器也可以为UTF-8文件添加BOM。

问题:
处理CSV文件是要特殊处理文件的前三个字节。
Linux不支持BOM
Excel 2007需要安装sp3才支持

http://stackoverflow.com/questions/6002256/is-it-possible-to-force-excel-recognize-utf-8-csv-files-automatically
http://stackoverflow.com/questions/155097/microsoft-excel-mangles-diacritics-in-csv-files/9337150#9337150
  • 大小: 16.3 KB
  • 大小: 2.5 KB
  • 大小: 16.4 KB
  • 大小: 2.4 KB
  • 大小: 9.1 KB
  • 大小: 9.1 KB
分享到:
评论

相关推荐

    csv文件中文会乱码工具

    excel打开csv文件中文乱码问题,将乱码文件拖到此工具就可完成转码,正常显示中文。

    Java避免UTF-8的csv文件打开中文出现乱码的方法

    主要介绍了Java避免UTF-8的csv文件打开中文出现乱码的方法,结合实例形式分析了java操作csv文件时使用utf-16le编码与utf8编码相关操作技巧,需要的朋友可以参考下

    中文系统中打开日文CSV文件不乱码.xlsm

    在中文系统中用Excel打开日文ANSI编码的CSV或TXT文件不乱码。 在日文系统中用Excel打开中文ANSI编码的CSV或TXT文件不乱码。 我自己写的:)

    完美解决php 导出excle的.csv格式的数据时乱码问题

    以上这篇完美解决php 导出excle的.csv格式的数据时乱码问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。 您可能感兴趣的文章:php实现批量上传数据到数据库(.csv格式)的...

    excel转csv转vcf和vcf转csv转excel

    导出手机vcf文件 - VCF2CSV读取vcf转为csv表格 - 打开excel\数据\导入外部数据(所有字优选文本类型) - 存中excel文件。 excel转csv转vcf步骤: excel文件 - 另存为csv表格 - VCF2CSV读取csv表格转为vcf - 导入手机

    精确月亮星历1991到2019年,6小时间隔

    请搜索"EXCEL打开CSV文件乱码的解决方法" 一般来说,用Notepad++,EditPlus等软件转换成系统默认编码保存后就可以打开了. 2-把其中的一个字段名"距离,..."中的引号与逗号去掉. 3-导入Excel 相位即月龄的百分比表示

    C#读取中文文件出现乱码的解决方法

    本文实例讲述了C#读取中文文件出现乱码的解决方法。分享给大家供大家参考。具体分析如下: 先来看这段代码: FileStream aFile = new FileStream(SingleFile,FileMode.Open); StreamReader sr = new StreamReader(a...

    python 写的一个json转csv文件的脚本

    用python 写的一个json转csv文件的脚本,csv 文件的分隔符用的 '|' ,hard code 到代码里了。...2. 转换完后先打开excel ,然后从excel 里面找到转换后文件.csv 打开(注意不能直接打开否则会有乱码)

    Python之pandas读写文件乱码的解决方法

    在pandas中读写csv时候通过制定encoding可以有效防止excel打开或者写入中文乱码 data.to_csv(f_out,index=False,encoding='gb2312') 以上这篇Python之pandas读写文件乱码的解决方法就是小编分享给大家的全部内容了...

    西门子TP1200触摸屏U盘导出的数据在EXCEL中无法分列显示的解决办法.docx

    西门子TP1200触摸屏U盘导出的数据在EXCEL中无法分列显示的解决办法

    bat脚本将csv格式UTF-8批量转ANSI

    excel打开csv的UTF-8编码文件,中文乱码,脚本批量转换。 将CSV文件放在bat目录下,双击批量转换.bat,生成的新文件在new文件夹中

    Moodle批量导入CSV文件格式的试题插件,支持多选和单选题

    注意:用Excel编辑csv文件后,用记事本打开,另存为UTF-8格式,否则中文显示乱码。 多选题qtype列:multichoiceset、multichoice均可。单选题填single。详细示例点击安装后的插件名称旁的帮助图标。 示例格式: ----...

    PHP+excel通用成绩查询系统 v7.8 SAE版

    查询结果几乎都由你Excel二维表控制,平时只需维护好你的Excel表,而操作Excel,几乎每台电脑都有软件可以打开编辑,几乎谁都会操作。2.使用简单。只需修改查询条件和标题,然后把你平时输入的excel二维表进行:复制

    快速解决mysql导出scv文件乱码、蹿行的问题

    工作原因,常常不能实现完全的线上化(即,所有数据都在线上完成,不需要导入导出...b:选中你导出的csv文件,右键选择打开方式为【记事本】; c:文件–>另存为–>编码选择UTF-8–>保存;(文件名和保存类型都不需要

    PHP excel通用成绩查询系统 v7.8 SAE版.zip

    其他格式导出为csv或excel后同样支持。查询结果几乎都由你Excel二维表控制,平时只需维护好你的Excel表,而操作Excel,几乎每台电脑都有软件可以打开编辑,几乎谁都会操作。 2.使用简单。只需修改查询条件和标题,然后...

    北京2021兴趣点(POI)数据

    每个类别包含省,市,名称,地址,经度,纬度,更新时间等一共9个字段等基础信息,为utf-8编码的csv文件,一个小类一个csv文件,可以直接导入ArcGIS软件,可以用notepad++转ANSI编码可解决excel打开乱码问题。...

    深圳2021兴趣点(POI)数据

    每个类别包含省,市,名称,地址,经度,纬度,更新时间等一共9个字段等基础信息,为utf-8编码的csv文件,一个小类一个csv文件,可以直接导入ArcGIS软件,可以用notepad++转ANSI编码可解决excel打开乱码问题。...

    成都2021兴趣点(POI)数据

    每个类别包含省,市,名称,地址,经度,纬度,更新时间等一共9个字段等基础信息,为utf-8编码的csv文件,一个小类一个csv文件,可以直接导入ArcGIS软件,可以用notepad++转ANSI编码可解决excel打开乱码问题。...

    广州2021兴趣点(POI)数据

    每个类别包含省,市,名称,地址,经度,纬度,更新时间等一共9个字段等基础信息,为utf-8编码的csv文件,一个小类一个csv文件,可以直接导入ArcGIS软件,可以用notepad++转ANSI编码可解决excel打开乱码问题。...

    天津2021兴趣点(POI)数据

    每个类别包含省,市,名称,地址,经度,纬度,更新时间等一共9个字段等基础信息,为utf-8编码的csv文件,一个小类一个csv文件,可以直接导入ArcGIS软件,可以用notepad++转ANSI编码可解决excel打开乱码问题。...

Global site tag (gtag.js) - Google Analytics