先说下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. Docker存储驱动之Btrfs简介

    简介 Btrfs是下一代的copy-on-write文件系统,它支持很多高级特性,使其更加适合Docker.Btrfs合并在内核主线中,并且它的on-disk-format也逐渐稳定了.不过,它的很多 ...

  2. 每天一个linux命令30)--chgrp命令

    在Linux系统里,文件或目录的权限的掌控以拥有者及所属群组来管理.可以使用chgrp 指令取变更文件与目录所属群组,这种方式采用群组名称或群组识别码都可以. chgrp 命令就是change  gr ...

  3. c#基础——for循环嵌套经典练习题(打★)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 作业题1 ...

  4. C#语言基础——定义变量、变量赋值、输入输出

    第一部分 了解c# 一.C#的定义及其特点 C#是微软公司在2000年7月发布的一种全新且简单.安全.面向对象的程序设计语言,是专门为.net的应用而开发的语言.它吸收了c++.Visual basi ...

  5. Python入门教程(2)

    人生苦短,我玩蛇0.0! Python(英语发音:/ˈpaɪθən/), 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991 ...

  6. 徒手用Java来写个Web服务器和框架吧<第二章:Request和Response>

    徒手用Java来写个Web服务器和框架吧<第一章:NIO篇> 接上一篇,说到接受了请求,接下来就是解析请求构建Request对象,以及创建Response对象返回. 多有纰漏还请指出.省略 ...

  7. 《Shell脚本学习指南》学习笔记之自定义函数

    Shell的函数在使用之前必须先定义,定义格式: [ function ] funname [()] { action; [return int;] } 可以带function fun()定义,也可以 ...

  8. 模仿Wireshark网络抓包工具实现---c++

    最近在用Wireshark抓包工具的时候,老感觉这东西用起来很简单,功能强大,所以想了解他的实现原理,我就自己好奇写了一个实现基本功能的demo吧. 其实叫抓包工具,其实就是抓取流经自己网卡的所有ip ...

  9. swift -- 代理delegate

    1.声明协议 protocol SecondDelagate { func sendValue(text : String!) -> Void } 2.声明代理属性 var delegate : ...

  10. webpack和webpack-dev-server安装配置(遇到各种问题的解决方法)

    跟着Webpack傻瓜式指南(一)这个教程在安装webpack和webpack-dev-server的时候遇到很多问题,查了很多终于一一找到解决办法. 主要参考了这三篇博文: moudule.js:3 ...