博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 字符转码之UTF-8转为GBK/GB2312
阅读量:6036 次
发布时间: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

你可能感兴趣的文章
下午考
查看>>
WKWebView
查看>>
创建字符设备的三种方法
查看>>
走在网页游戏开发的路上(六)
查看>>
nginx 配置的server_name参数(转)
查看>>
Uva592 Island of Logic
查看>>
C++基础代码--20余种数据结构和算法的实现
查看>>
footer固定在页面底部的实现方法总结
查看>>
nginx上传文件大小
查看>>
数字通信原理笔记(一)---概述
查看>>
HDU 2243 考研路茫茫——单词情结(自动机)
查看>>
Dubbo OPS工具——dubbo-admin & dubbo-monitor
查看>>
如何将OpenCV中的Mat类绑定为OpenGL中的纹理
查看>>
CutyCapt
查看>>
Dungeon Master ZOJ 1940【优先队列+广搜】
查看>>
解决https://localhost:1158/em 页面无法打开的问题
查看>>
[Cocoa]深入浅出Cocoa之Core Data(4)- 使用绑定
查看>>
原理:什么是Quadtrees?(转)
查看>>
记:返回方法参数的值(或多个值),
查看>>
Effective C++ 的52个条款列表
查看>>