Java 字符转码之UTF-8转为GBK/GB2312

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<img src=‘sasa‘ /> fjldsajflkdsjaflkdsjalf <img src=‘sada‘ ait=‘‘/>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"));
时间: 2024-10-08 20:04:34

Java 字符转码之UTF-8转为GBK/GB2312的相关文章

java 字符转码与反转码

本人最近在做OAF的二次开发,在看别人写的代码时,发现总有类似这样的语句:”\u65e0\u6548\u7684GP\u9879\u76ee\u7f16\u53f7“,这些语句其实是用Java_home中的工具native2ascii.exe转码而成.在显示消息通知时,oracle并不推荐这么做,平时都是在”应用开发员“这个职责下配的消息.下面我就来介绍下如何用native2ascii.exe工具进行转码和反转码的. 1.java 字符转码 打开dos窗口,输入cmd, 并且输入:cd C:\P

java字符编码详解

引用自:http://blog.csdn.net/jerry_bj/article/details/5714745 GBK.GB2312.iso-8859-1之间的区别 GB2312,由中华人民共和国政府制定的,简体汉字编码规范,大陆所有计算机中的简体中文,都使用此种编码格式.目前,我也不知道还有另外的简体汉字编码规范.与此对应的还有BIG5,是中华民国政府制定的,繁体汉字的编码规范,一般应用于海外计算机的繁体中文显示.所谓的繁体中文Windows,简体中文Windows,指的就是采用BIG5和

Java 字符码、字符流、字节流

字符编码表 Ascii: 0-xxxxxxx正数 iso-8859-1: 拉丁码表1-xxxxxxx  负数. GB2312: 简体中文码表 GBK: 最常用的中文码表 String字符串默认 GB18030: 最新的中文码表 unicode: 国际标准码表 char字符默认 每个字符两字节 UTF-8: 基于unicode 每个字符一个或两个字节 能识别中文的码表:GBK.UTF-8 常见的编码 GBK  UTF-8  ISO-8859-1 文字--->(数字) :编码 "abc&quo

【字符编码】Java字符编码详细解答及问题探讨

一.前言 继上一篇写完字节编码内容后,现在分析在Java中各字符编码的问题,并且由这个问题,也引出了一个更有意思的问题,笔者也还没有找到这个问题的答案.也希望各位园友指点指点. 二.Java字符编码 直接上代码进行分析似乎更有感觉.   运行结果:   说明:通过结果我们知道如下信息. 1. 在Java中,中文在用ASCII码表示为3F,实际对应符号'?',用ISO-8859-1表示为3F,实际对应符号也是为'?',这意味着中文已经超出了ASCII和ISO-8859-1的表示范围. 2. UTF

C#编程总结(十)字符转码

C#编程总结(十)字符转码 为了适应某种特殊需要,字符需要根据规则进行转码,便于传输.展现以及其他操作等. 看看下面的转码,就知道他的用处了. 1.字符串转码 根据原编码格式与目标编码格式,完成转换.不过可能出现乱码哦.上一章已经介绍过了. 代码: /// <summary> /// 字符串编码转换 /// </summary> /// <param name="srcEncoding">原编码</param> /// <param

java字符转义

之前对java字符转义这一块稍作了解,在这里理理自己主观浅显的理解 这里会谈谈字符编码的是另一种问题和转义没有关系 以下面代码做分析 System.out.println("a".length()+"b".length()); 对以上代码["a".length()+"b".length()]部分 ["]默认作为编译器的["],用来识别编译器中的字符串部分,["a".length()+&q

java字符格式

http://blog.chinaunix.net/uid-12348673-id-3335300.html http://blog.csdn.net/zhouyong80/article/details/1900100无论是对程序的本地化还是国际化,都会涉及到字符编码的转换的问题.尤其在web应用中常常需要处理中文字符,这时就需要进行字符串的编码转换,将字符串编码转换为GBK或者GB2312. 一.关键技术点:    1.当前流行的字符编码格式有:US-ASCII.ISO-8859-1.UTF

Java 字符编码归纳总结

String newStr = new String(oldStr.getBytes(), "UTF-8");       java中的String类是按照unicode进行编码的,当使用String(byte[] bytes, String encoding)构造字符串时,encoding所指的是bytes中的数据是按照那种方式编码的,而不是最后产生的String是什么编码方式,换句话说,是让系统把bytes中的数据由encoding编码方式转换成unicode编码.如果不指明,by

java字符编码转换过程(转)

在Java中,String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组.这个表示在不通OS下,返回的东西不一样! String.getBytes(String decode)方法会根据指定的decode编码返回某字符串在该编码下的byte数组表示,如 byte[] b_gbk = "中".getBytes("GBK"); byte[] b_utf8 = "中".getBytes("UTF-8"); by