博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 字符转码之UTF-8转为GBK/GB2312
阅读量:6039 次
发布时间:2019-06-20

本文共 2560 字,大约阅读时间需要 8 分钟。

java跟python类似的做法,在java中字符串的编码是java修改过的一种Unicode编码,所以看到java中的字符串,心理要默念这个东西是java修改过的一种Unicode编码的编码。

package string;import java.nio.charset.Charset;public class UTF82GBK {    public static void main(String[] args) throws Exception {        //系统的默认编码是GBK        System.out.println("Default Charset=" + Charset.defaultCharset());        String t = "hfjkds中国中国中国中国中国中国中国中国中国中国中国中国中国中国中国中国中国中国中国中国hfsdkj fjldsajflkdsjaflkdsjalf sfdsfadas";          //思路:先转为Unicode,然后转为GBK        String utf8 = new String(t.getBytes( "UTF-8"));        //等同于://        String utf8 = new String(t.getBytes( "UTF-8"),Charset.defaultCharset());                System.out.println(utf8);          String unicode = new String(utf8.getBytes(),"UTF-8");           //等同于://        String unicode = new String(utf8.getBytes(Charset.defaultCharset()),"UTF-8");           System.out.println(unicode);          String gbk = new String(unicode.getBytes("GBK"));          //等同于://        String gbk = new String(unicode.getBytes("GBK"),Charset.defaultCharset());                    System.out.println(gbk);      }}

 

 

 

package com.mkyong; import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.InputStreamReader; public class UTF8ToGBK {    public static void main(String[] args) throws Exception {         File fileDir = new File("/home/user/Desktop/Unsaved Document 1");         BufferedReader in = new BufferedReader(new InputStreamReader(                new FileInputStream(fileDir), "UTF-8"));         String str;         while ((str = in.readLine()) != null) {            System.out.println(str);// java内部只有unicode编码 所以str是unicode编码            String str2 = new String(str.getBytes("GBK"), "GBK");// str.getBytes("GBK")是gbk编码,但是str2是unicode编码            System.out.println(str2);        }         in.close();    }}

 问题的关键是new String(xxx.getBytes("gbk"), "gbk")这句话是什么意思,xxx.getBytes("gbk")得到的数组编码是GBK,因此必须必须告诉java:我传给你的数组是gbk编码的,你在转换成你内部的编码的时候记得要进行一些处理,new String(xxx.getBytes("gbk"), "gbk"),这句话第二个“gbk”是告诉java传递给它的是gbk编码的字符串。

String fullStr = new String(str.getBytes("UTF-8"), "UTF-8");//正常String fullStr2 = new String(str.getBytes("UTF-8"), "GBK");//不正常,java内置的编码->utf8  被当成GBK编码转换成java内置的编码

看一下jdk文档是怎么说的

public String(byte[] bytes,      Charset charset)

Constructs a new String by decoding the specified array of bytes using the specified charset.

那现在的问题就是,我怎么在String中持有GBK编码的东西呢?

String str3 = new String(str.getBytes("GBK"),"ISO-8859-1");System.out.println(new String(str3.getBytes("ISO-8859-1"),"GBK"));

 

转载于:https://www.cnblogs.com/ghgyj/p/4020879.html

你可能感兴趣的文章
焊盘 往同一个方向增加 固定的长度方法 总结
查看>>
eclipse的maven、Scala环境搭建
查看>>
架构师之路(一)- 什么是软件架构
查看>>
jquery的冒泡和默认行为
查看>>
USACO 土地购买
查看>>
【原创】远景能源面试--一面
查看>>
B1010.一元多项式求导(25)
查看>>
10、程序员和编译器之间的关系
查看>>
前端学习之正则表达式
查看>>
配置 RAILS FOR JRUBY1.7.4
查看>>
AndroidStudio中导入SlidingMenu报错解决方案
查看>>
修改GRUB2背景图片
查看>>
Ajax异步
查看>>
好记性不如烂笔杆-android学习笔记<十六> switcher和gallery
查看>>
JAVA GC
查看>>
codeforce 599B Spongebob and Joke
查看>>
3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
查看>>
9、Dubbo-配置(4)
查看>>
前端第七天
查看>>
BZOJ 2190[SDOI2008]仪仗队
查看>>