博客
关于我
强烈建议你试试无所不能的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

你可能感兴趣的文章
对 ASP.NET 图像的颜色量化(Quantization)进行优化
查看>>
Oracle中NVARCHAR2字符集不匹配问题
查看>>
一起学微软Power BI系列-官方文档-入门指南(7)发布与共享-终结篇+完整PDF文档
查看>>
MVC 服务器文件下载
查看>>
【转】Arp的攻防实战
查看>>
1.5. mount
查看>>
7.3. cvs import
查看>>
五个对你有用的Everything搜索技巧
查看>>
LinuxMint 17.1 Cinnamon桌面窗口焦点bug
查看>>
WM8962 HPOUT 信号强度 时间周期
查看>>
[家里蹲大学数学杂志]第432期Hardy type inequalities
查看>>
Spring MVC 4.2 CORS 跨域访问
查看>>
小计生产数据库事故--缺少where的update
查看>>
谁偷走了我们的时间?
查看>>
[20170410]11G ora_sql_txt是否有效.txt
查看>>
CoreThink 之 Git 模块 v1.1.2 支持二级域名
查看>>
《Unity 3D人工智能编程》——第1章 人工智能导论
查看>>
《Linux 设备驱动开发详解(第2版)》——1.3 有操作系统时的设备驱动
查看>>
《数据库技术原理与应用教程(第2版)》——1.5 数据管理的变迁
查看>>
《CMOS集成电路后端设计与实战》——1.2 国内集成电路发展现状
查看>>