Java字符转码之UTF-8转为GBKGB2312
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 Bytes( "UTF-8"));
//等同于:
// String utf8 = new Bytes( "UTF-8"),Charset.defaultCharset());
System.out.println(utf8);
String unicode = new Bytes(),"UTF-8");
//等同于:
// String unicode = new Bytes(Charset.defaultCharset()),"UTF-8");
System.out.println(unicode);
String gbk = new Bytes("GBK"));
//等同于:
// String gbk = new Bytes("GBK"),Charset.defaultCharset());
unicode字符转中文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 Bytes("GBK"), "GBK");// Bytes("GBK")是gbk编码,但是str2是unicode编码
System.out.println(str2);
}
in.close();
}
}
问题的关键是new Bytes("gbk"), "gbk")这句话是什么意思,Bytes("gbk")得到的数组编码是GBK,因此必须必须告诉java:我传给你的数组是gbk编码的,你在转换成你内部的编码的时候记得要进⾏⼀些处理,new Bytes("gbk"), "gbk"),这句话第⼆个“gbk”是告诉java传递给它的是gbk编码的字符串。
String fullStr = new Bytes("UTF-8"), "UTF-8");//正常
String fullStr2 = new Bytes("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 Bytes("GBK"),"ISO-8859-1");
System.out.println(new Bytes("ISO-8859-1"),"GBK"));
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论