mac下CSV文件用FileReader、FileWriter读写乱码
在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读写乱码的更多相关文章
- java FileReader/FileWriter读写文件
java FileReader/FileWriter读写字母和数字没问题,但读写汉字就乱码.记录下,后面找到解决方法再补上. public static void main(String[] args ...
- MAC下 mysql不能插入中文和中文乱码的问题总结
MAC下 mysql不能插入中文和中文乱码的问题总结 前言 本文中所提到的问题解决方案,都是基于mac环境下的,但其他环境,比如windows应该也适用. 问题描述 本文解决下边两个问题: 往mysq ...
- 10.3 io流 正篇 FileReader FileWriter读写代码
一.FileWriter 小节: 1)FileWriter fw = new FileWriter("a.txt",true);//表示追加写入,默认是false.正常情况:执行多 ...
- Mac下DIY文件浏览器
2015-07-14 15:07:53 Mac下的finder不能浏览Linux文件目录, 一些优秀的资源管理器是收费的..... 于是想到了既然Mac的本质是类Unix, 而在windows下查看L ...
- Mac下hosts文件配置
工作中总会因为莫名其妙的原因,比如Mac下面打不开某网站,但是在windows 7下面却可以,此时只需两步即可完成在Mac下面上网.在Windows下面Win+R,输入cmd,进入命令行,将在wind ...
- mac下执行文件出现Permission Denied的解决
mac 下终端访问文件出现“Permission Denied”解决方案: 一个文件有3种权限,读.写.可执行,你这个文件没有可执行权限,需要加上可执行权限. 1. 终端下先 cd到该文件的目录下 2 ...
- excel for mac打开csv文件不分列
参考链接:http://www.1207.me/archives/247.html excel for mac在打开csv文件(逗号分隔的文本文件)的时候,不能像windows那样分列,而且全都挤在一 ...
- Mac下将文件复制到移动硬盘
在Mac下将移动硬盘格式化成exfat,这样Mac和Windows都可以对移动硬盘进行识别
- MySQL直接导出CSV文件,并解决中文乱码的问题
需求: 需要导出hr_users 表中的部分字段的数据,以前是用PHP写脚本,然后导出CSV文件. 在MySQL中,它自己就能导出CSV文件 ,只不过是有如下几个问题需要大家解决. 1. 生成文件不成 ...
随机推荐
- ABP Zero源码
测试运行地址:http://ghy.demo.aspnetzero.com 账号:admin 密码:123456 需要源码,请加QQ:858-048-581 1.先编译成功,Nuget下载ABP的依 ...
- 从源码解析TreeMap
上篇文章我们介绍了HashMap集合,这是一个键值对集合,可以高效的按照键查找数值.但是它有一个缺陷:数据如果是无序的可以是很高效的,但是如果数据需要排列有顺序就不适合了.本篇将要介绍的一个集合是树集 ...
- 第25篇 jQuer快速学习(上)---选择器和DOM操作
这个文章经历的时间比较长,不是因为jQuery比较难,而是东西比较多,真心是个体力活.所以本来想把jQuery做成一篇去写,但由于写的时候发现jQuery发现写成一篇的话过于长,对于阅读起来也不是一个 ...
- java 完全二叉树的构建与四种遍历方法
本来就是基础知识,不能丢的太干净,今天竟然花了那么长的时间才写出来,记一下. 有如下的一颗完全二叉树: 先序遍历结果应该为:1 2 4 5 3 6 7 中序遍历结果应该为:4 2 5 ...
- Javaweb之Servlet入门
1. 什么是Servlet? Java Servlet 是运行在 Web 服务器或应用服务器上的程序:他是浏览器(HTTP客户端)请求和HTTP服务器上资源(访问数据库)之间的中间层. 2. 什么是S ...
- cocos2dx 中文路径编译错误记录
'/Q' 不是内部或外部命令,也不是可运行的程序1> 或批处理文件.1> 'y' 不是内部或外部命令,也不是可运行的程序1> 或批处理文件.1>C:\Program Files ...
- express 4
http://www.expressjs.com.cn/4x/api.html#app中间件 路由 模板 跨域 json cookie session
- SDWebImage下载图片的使用
第一步,下载SDWebImage,导入工程.github托管地址https://github.com/rs/SDWebImage 第二步,在需要的地方导入头文件 1 #import "UII ...
- 使用Eclipse/MyEclipse开发Java程序
集成开发环境(IDE)是一类软件 将程序开发环境和程序调试环境集合在一起,提高开发效率 下载eclipse安装包网址:http://www.eclipse.org/downloads/ **MyEcl ...
- java-信息安全(四)-数据签名、数字证书
概述 信息安全基本概念: 数字签名 数字证书 数字签名 数字签名(又称公钥数字签名.电子签章)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法.一套数字签名 ...