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. 生成文件不成 ...
随机推荐
- php封装+租房子练习题
第一个页面DBDA.class.php <?php class DBDA { public $host = "localhost"; public $uid = " ...
- Ichars制作数据统计图
数据统计图基本上每个网站的后台都要做,不仅要做还要的非常详细才行,这样才能全面的具体的了解网站数据.之前用的jfreechart没有iChartjs用着方便,也没有iChartjs的效果炫,所以果断弃 ...
- 关于Storm tick
关于Storm tick 1. tick的功能 Apache Storm中内置了一种定时机制——tick,它能够让任何bolt的所有task每隔一段时间(精确到秒级,用户可以自定义)收到一个来自__s ...
- .NET入行之工作前
时间就像轻风一样,刻意感受的时候几乎把你吹倒,不留意的时候又从你身边轻轻飘走了:长此以后,我怕自己会变得麻木,忘记了原来的样子.所以还是决定给自己留点什么,万一哪天忘记了,还可以再翻起来. 工作两年的 ...
- Kali linux learning note
from:http://blog.sina.com.cn/s/blog_40983e5e0101dhz0.html 因为kali linux基于debian 7,当然要把这台Acer 4736 ...
- 手把手教你怎么搭建angular+gulp的项目(一)
大多时候,我们要学习一个新东西,不是不肯去学,而是不知道该如何开始.比如学angular,我要怎么开始学?怎么应用到自己项目中?这篇文章就是我根据自己边学习边应用,构建一个项目的切身体会,来讲下怎么开 ...
- 关于Tarjan(1)
众所周知, 求有向图的强连通分量的Tarjan算法是以其发明者Robert Tarjan命名的.Robert Tarjan还发明了求双连通分量的Tarjan算法,以及求最近公共祖先(LCA)的离线Ta ...
- 手动编写JQUERY插件
就拿一个简单的示例来说,鼠标点击输入框,提示文字消息,鼠标移开,再显示提示文字. <script type="text/javascript"> //编写插件 (fun ...
- bing翻译API调用方法
概述 前一段时间,遇到一个需求,需要对文章进行翻译,由于客户公司员工有国内的人员,也有国外的人员,为了照顾国外的同事,客户提出,当用户在手机端发布帖子,需要同时把帖子的内容翻译成英文,方便用户阅读.于 ...
- 深入理解CPU和异构计算芯片GPU/FPGA/ASIC (上篇)
王玉伟,腾讯TEG架构平台部平台开发中心基础研发组资深工程师,专注于为数据中心提供高效的异构加速云解决方案.目前,FPGA已在腾讯海量图片处理以及检测领域已规模上线. 随着互联网用户的快速增长,数据体 ...