先说下windows的excel文件搬到mac下打开为什么会显示乱码。
    在win下,excel采用GBK编码,1个汉字是存为2个字节,而mac下各种软件广泛默认使用UTF-8编码方式,如在excel中,1个汉字存为3个字节,所以mac下用excel解码二进制时,也就是把二进制文件解码为汉字过程中,把原本相邻2个字节认为是一个汉字,现在拆解为把相邻3个字节才认为是一个汉字。你设想,假如源文件只有3个汉字是6个字节,来到mac下,6个字节才等于2个汉字大小,整个文件肯定都读不出原来语义了,细心的你还会发现乱码部分变少了。这每3个字节在UTF-8码表上对应什么码值就显示什么码值,如果没有对应码值,会以特殊字符代替,这些都叫“乱码”。简单来说,就是用GBK编码,打开浏览却用UTF-8解码导致的。

    在说测试代码前,我先普及下,mac下MyEclipse默认也是UTF-8,在preference--general--workspace里可以查看和更改。我们在用IO流的各种方法,比如测试代码里的String(byte[] bytes, int offset, int length) 和FileWriter.write(),查看他们的文档注释时,大都提到采用平台默认编码方式,就是指这里的编码方式。

    但不论你的MyEclipse是设置为GBK还是UTF-8,运行代码你会发现,1个相同点和1个不同点。
    相同点是生成的22.csv文件里都是乱码。当用GBK时,FileReader读的是对的,都把2个字节认为1个汉字。你取消注释,能打印出来中文就能验证我说的对,FileWriter写也是对的,也是把2个字节认为1个汉字,至于生成的22.csv显示乱码,是因为mac下excel用UTF-8解码的缘故。正因为FileReader、FileWriter都用GBK读写而excel用UTF-8解码,所以22.csv和11.csv乱码显示是一样的。
    不同点是,用UTF-8时,生成的22.csv显示的乱码跟GBK下显示的乱码不同,因为读写都按3个字节处理。原理同上。理解了,你也能知道,即使有把22.csv重新用UTF-8存储的功能,也找不回原来的文字,因为从最开始再windows我们给excel输入中文保存时,就默认选择了1个汉字按2个字节存储的GBK编码方式。(难怪我在mac的excel下没发现选择存储编码方式)
    如何避免呢,在win下就该存一份UTF-8格式的文件再拷贝到mac。因为只有在最开始写好中文保存的时候,就决定了汉字按2个字节存储还是3个字节存储。当然MAC也有相应的转换工具iconv,但我使用发现文件预览是正确汉字,打开还是乱码,但起码能看到汉字,说明iconv是没问题的,可能是excel版本兼容问题,我的是最新的mac版本office365。
 

 
 
 
 
 

mac下CSV文件用FileReader、FileWriter读写乱码的更多相关文章

  1. java FileReader/FileWriter读写文件

    java FileReader/FileWriter读写字母和数字没问题,但读写汉字就乱码.记录下,后面找到解决方法再补上. public static void main(String[] args ...

  2. MAC下 mysql不能插入中文和中文乱码的问题总结

    MAC下 mysql不能插入中文和中文乱码的问题总结 前言 本文中所提到的问题解决方案,都是基于mac环境下的,但其他环境,比如windows应该也适用. 问题描述 本文解决下边两个问题: 往mysq ...

  3. 10.3 io流 正篇 FileReader FileWriter读写代码

    一.FileWriter 小节: 1)FileWriter fw = new FileWriter("a.txt",true);//表示追加写入,默认是false.正常情况:执行多 ...

  4. Mac下DIY文件浏览器

    2015-07-14 15:07:53 Mac下的finder不能浏览Linux文件目录, 一些优秀的资源管理器是收费的..... 于是想到了既然Mac的本质是类Unix, 而在windows下查看L ...

  5. Mac下hosts文件配置

    工作中总会因为莫名其妙的原因,比如Mac下面打不开某网站,但是在windows 7下面却可以,此时只需两步即可完成在Mac下面上网.在Windows下面Win+R,输入cmd,进入命令行,将在wind ...

  6. mac下执行文件出现Permission Denied的解决

    mac 下终端访问文件出现“Permission Denied”解决方案: 一个文件有3种权限,读.写.可执行,你这个文件没有可执行权限,需要加上可执行权限. 1. 终端下先 cd到该文件的目录下 2 ...

  7. excel for mac打开csv文件不分列

    参考链接:http://www.1207.me/archives/247.html excel for mac在打开csv文件(逗号分隔的文本文件)的时候,不能像windows那样分列,而且全都挤在一 ...

  8. Mac下将文件复制到移动硬盘

    在Mac下将移动硬盘格式化成exfat,这样Mac和Windows都可以对移动硬盘进行识别

  9. MySQL直接导出CSV文件,并解决中文乱码的问题

    需求: 需要导出hr_users 表中的部分字段的数据,以前是用PHP写脚本,然后导出CSV文件. 在MySQL中,它自己就能导出CSV文件 ,只不过是有如下几个问题需要大家解决. 1. 生成文件不成 ...

随机推荐

  1. wpf的无边框窗体透明

    本人做了3年的winform,来了新的工作,需要使用wpf.对于wpf,本人小白一个.说的不对的地方,请大家多多指导.... 今天先从wpf的窗体属性开始说起! 需要做的项目功能大概和电脑桌面类似,需 ...

  2. 每天一个linux命令(34)--top命令

    今天给领导发邮件,我这边虽然显示发出去了,但是他那边一直没收到,结果我以为我发了,他又一直在那边等结果.所以说,以后要另外发个信息或者QQ微信之类的说一声. top命令是Linux 下常用的性能分析工 ...

  3. java 完全二叉树的构建与四种遍历方法

    本来就是基础知识,不能丢的太干净,今天竟然花了那么长的时间才写出来,记一下. 有如下的一颗完全二叉树: 先序遍历结果应该为:1  2  4  5  3  6  7 中序遍历结果应该为:4  2  5 ...

  4. 配置虚拟主机(windows环境下nginx+php)

    需要给一个ip绑定不同域名,例如有两个项目/www/,/www2/ 需要http://a.com时访问的是www 项目 http://b.com访问的是www2项目   那么需要在nginx/conf ...

  5. Javaweb之Jsp

    1. JSP是什么? JSP全称Java Server Pages,是一种动态网页开发技术.它使用JSP标签在HTML网页中插入Java代码.标签通常以<%开头以%>结束. 2. JSP带 ...

  6. react学习总结

    http://www.runoob.com/react/react-tutorial.html一般先看一些中文的简单的介绍和一些基本概念http://reactjs.cn/react/docs/get ...

  7. Effective Modern C++ Item 27:重载universal references

    假设有一个接收universal references的模板函数foo,定义如下: template<typename T> void foo(T&& t) { cout ...

  8. aiohttp之添加静态资源路径

    所谓静态资源,是指图片.js.css等文件.官方的说明在这里. 以一个小项目来说明,下面是项目的目录结构: . ├── static │ ├── css │ │ ├── base.css │ │ ├─ ...

  9. poj 2892---Tunnel Warfare(线段树单点更新、区间合并)

    题目链接 Description During the War of Resistance Against Japan, tunnel warfare was carried out extensiv ...

  10. Lambda&Java多核编程-6-方法与构造器引用

    在Lambda&Java多核编程-2-并行与组合行为一文中,我们对Stream<Contact>里的每一位联系人调用call()方法,并根据能否打通的返回结果过滤掉已经失效的项. ...