中文编码问题虽然是个老问题,但对不熟悉的人来说还是不好处理的。不过Java中已经有了一套比较成熟的解决方案。

首先对中文编码格式予以简单介绍:
中文编码有三套国标:GB2312,GBK,GB18030,从前到后互为超集。GBK最为常见。这里不展开介绍,具体可以谷歌。

不过国际上通用的还是UTF-8,如果我们自己写中文的话,最好以UTF-8的方式编码,不然处理起来真的很麻烦。

下面以Java读文件为例,说明一下java处理中文编码的方法。

java可以按字符读,也可以按字节流读,不管怎么样,读中文的时候都要涉及到编码解码的问题。

按字符读,不显式指定编码的话,一般是按本地环境的默认字符集,中文就是GBK。

如果显式指定字节解码就要用到InputStreamReader类,它是字节转向字符的桥梁。

它的一个构造方法: InputStreamReader(InputStream,Charset),可以显式的指定解码方式。

如果我们知道了中文文件的编码,在Charset参数中指定,就不会出现乱码了。

当我们用String对象保存中文时,也可以显式的指定编码方式。比如:

String example = "中文字符串";

byte[] b = example.getBytes("UTF-8");  //这个方法将中文重新以UTF-8的方式编码。并返回字节流数组。

String newStr = new String(b,"UTF-8"); // 将字节流以UTF-8的方式,转化为字符串。

实际上,getBytes()是调用Charset类来进行编码的。

Charset类是java内部专门用于编码解码的类,更为显式。

Charset charset = Charset.forName("UTF-8");

ByteBuffer byteBuffer = charset.encode(String);

CharBuffer charBuffer = charset.decode(byteBuffer);

具体展开可以参考下面博客,讲的很清晰:

https://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/

最新文章

  1. 基础笔记10(IO 1.7try-with-resource) 装饰模式
  2. C# 图片压缩
  3. [ZigBee] 13、ZigBee基础阶段性回顾与加深理解——用定时器1产生PWM来控制LED亮度(七色灯)
  4. HDU 4920 Matrix multiplication (硬件优化)
  5. 《RESTful Web Services》第一章 使用统一接口
  6. 使用jeesite org.springframework.beans.NotReadablePropertyException: Invalid property 'tfxqCmsAccount.id' of bean class
  7. App升级时数据库的迁移更新
  8. NSValue NSNumber NSData类
  9. Java_1Lesson
  10. Quartz2D 之 简单使用
  11. angular : ng-animate : ng-show 原理,详解
  12. HTTP协议的消息头:Content-Type和Accept的作用
  13. Gem/Bundle/Rvm
  14. Maven学习(三)-- 使用Maven构建项目
  15. Dynamics 365 Customer Engagement V9 活动源功能报错的解决方法
  16. Linux 中提高的 SSH 的安全性
  17. [原]OpenGL基础教程(一)多边形绘制
  18. mysql为什么要分库分表?
  19. ACE Editor在线代码编辑器简介及使用引导
  20. 关于Trie的一些算法

热门文章

  1. 深入浅出设计模式——访问者模式(Visitor Pattern)
  2. Java面向对象三大特点之封装
  3. Android studio环境搭建
  4. excel模版从xp复制到win7系统后出现错误 运行时错误 '429' ActiveX 部件不能创建对象
  5. Spring事务管理只对出现运行期异常进行回滚
  6. 关于JSPatch热修复
  7. 在与SQL Server建立连接时出现于网络相关的或特定于实例的错误
  8. [教程] 离线封装原版WIN7系统 100%纯净
  9. Laravel 流程分析——应用程序初始化
  10. Java中常用的运算符