- 浏览: 792353 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
xueweiabcok:
PowerDesigner15官方正式版+注册补丁 -
春天好:
博主写的很好,赞一个,多谢分享 *(^-^*)分享一个免费好用 ...
爬虫技术 -
零度弥合:
每天进步1%,那你一百天就成神啦。
Linux下Grails开发环境变量配置 -
dajian0822:
问下,那你显示存储CKEditor文本存储后,在用CKEdit ...
CKEditor学习笔记 -
mengfei86:
...
爬虫技术
无论是对程序的本地化还是国际化,都会涉及到字符编码的转换的问题。尤其在web应用中常常需要处理中文字符,这时就需要进行字符串的编码转换,将字符串编码转换为GBK或者GB2312。
一、关键技术点:
1、当前流行的字符编码格式有:US-ASCII、ISO-8859-1、UTF-8、UTF-16BE、UTF-16LE、UTF-16、GBK、GB2312等,其中GBK、GB2312是专门处理中文编码的。
2、String的getBytes方法用于按指定编码获取字符串的字节数组,参数指定了解码格式,如果没有指定解码格式,则按系统默认编码格式。
3、String的“String(bytes[] bs, String charset)”构造方法用于把字节数组按指定的格式组合成一个字符串对象
二、实例演示:
package book.String;
import java.io.UnsupportedEncodingException;
/** *//**
* 转换字符串的编码
* @author joe
*
*/
public class ChangeCharset ...{
/** *//** 7位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁块 */
public static final String US_ASCII = "US-ASCII";
/** *//** ISO拉丁字母表 No.1,也叫做ISO-LATIN-1 */
public static final String ISO_8859_1 = "ISO-8859-1";
/** *//** 8 位 UCS 转换格式 */
public static final String UTF_8 = "UTF-8";
/** *//** 16 位 UCS 转换格式,Big Endian(最低地址存放高位字节)字节顺序 */
public static final String UTF_16BE = "UTF-16BE";
/** *//** 16 位 UCS 转换格式,Litter Endian(最高地址存放地位字节)字节顺序 */
public static final String UTF_16LE = "UTF-16LE";
/** *//** 16 位 UCS 转换格式,字节顺序由可选的字节顺序标记来标识 */
public static final String UTF_16 = "UTF-16";
/** *//** 中文超大字符集 **/
public static final String GBK = "GBK";
public static final String GB2312 = "GB2312";
/** *//** 将字符编码转换成US-ASCII码 */
public String toASCII(String str) throws UnsupportedEncodingException ...{
return this.changeCharset(str, US_ASCII);
}
/** *//** 将字符编码转换成ISO-8859-1 */
public String toISO_8859_1(String str) throws UnsupportedEncodingException ...{
return this.changeCharset(str, ISO_8859_1);
}
/** *//** 将字符编码转换成UTF-8 */
public String toUTF_8(String str) throws UnsupportedEncodingException ...{
return this.changeCharset(str, UTF_8);
}
/** *//** 将字符编码转换成UTF-16BE */
public String toUTF_16BE(String str) throws UnsupportedEncodingException...{
return this.changeCharset(str, UTF_16BE);
}
/** *//** 将字符编码转换成UTF-16LE */
public String toUTF_16LE(String str) throws UnsupportedEncodingException ...{
return this.changeCharset(str, UTF_16LE);
}
/** *//** 将字符编码转换成UTF-16 */
public String toUTF_16(String str) throws UnsupportedEncodingException ...{
return this.changeCharset(str, UTF_16);
}
/** *//** 将字符编码转换成GBK */
public String toGBK(String str) throws UnsupportedEncodingException ...{
return this.changeCharset(str, GBK);
}
/** *//** 将字符编码转换成GB2312 */
public String toGB2312(String str) throws UnsupportedEncodingException ...{
return this.changeCharset(str,GB2312);
}
/** *//**
* 字符串编码转换的实现方法
* @param str 待转换的字符串
* @param newCharset 目标编码
*/
public String changeCharset(String str, String newCharset) throws UnsupportedEncodingException ...{
if(str != null) ...{
//用默认字符编码解码字符串。与系统相关,中文windows默认为GB2312
byte[] bs = str.getBytes();
return new String(bs, newCharset); //用新的字符编码生成字符串
}
return null;
}
/** *//**
* 字符串编码转换的实现方法
* @param str 待转换的字符串
* @param oldCharset 源字符集
* @param newCharset 目标字符集
*/
public String changeCharset(String str, String oldCharset, String newCharset) throws UnsupportedEncodingException ...{
if(str != null) ...{
//用源字符编码解码字符串
byte[] bs = str.getBytes(oldCharset);
return new String(bs, newCharset);
}
return null;
}
public static void main(String[] args) throws UnsupportedEncodingException ...{
ChangeCharset test = new ChangeCharset();
String str = "This is a 中文的 String!";
System.out.println("str:" + str);
String gbk = test.toGBK(str);
System.out.println("转换成GBK码:" + gbk);
System.out.println();
String ascii = test.toASCII(str);
System.out.println("转换成US-ASCII:" + ascii);
System.out.println();
String iso88591 = test.toISO_8859_1(str);
System.out.println("转换成ISO-8859-1码:" + iso88591);
System.out.println();
gbk = test.changeCharset(iso88591, ISO_8859_1, GBK);
System.out.println("再把ISO-8859-1码的字符串转换成GBK码:" + gbk);
System.out.println();
String utf8 = test.toUTF_8(str);
System.out.println();
System.out.println("转换成UTF-8码:" + utf8);
String utf16be = test.toUTF_16BE(str);
System.out.println("转换成UTF-16BE码:" + utf16be);
gbk = test.changeCharset(utf16be, UTF_16BE, GBK);
System.out.println("再把UTF-16BE编码的字符转换成GBK码:" + gbk);
System.out.println();
String utf16le = test.toUTF_16LE(str);
System.out.println("转换成UTF-16LE码:" + utf16le);
gbk = test.changeCharset(utf16le, UTF_16LE, GBK);
System.out.println("再把UTF-16LE编码的字符串转换成GBK码:" + gbk);
System.out.println();
String utf16 = test.toUTF_16(str);
System.out.println("转换成UTF-16码:" + utf16);
String gb2312 = test.changeCharset(utf16, UTF_16, GB2312);
System.out.println("再把UTF-16编码的字符串转换成GB2312码:" + gb2312);
}
}
输出结果:
str:This is a 中文的 String!
转换成GBK码:This is a 中文的 String!
转换成US-ASCII:This is a ?????? String!
转换成ISO-8859-1码:This is a ?????? String!
再把ISO-8859-1码的字符串转换成GBK码:This is a 中文的 String!
转换成UTF-8码:This is a ????? String!
转换成UTF-16BE码:周楳?猠愠????瑲楮朡
再把UTF-16BE编码的字符转换成GBK码:This is a 中文的 String!
转换成UTF-16LE码:桔獩椠?????匠牴湩Ⅷ
再把UTF-16LE编码的字符串转换成GBK码:This is a 中文的 String!
转换成UTF-16码:周楳?猠愠????瑲楮朡
再把UTF-16编码的字符串转换成GB2312码:?This is a 中文的 String!
三、源码分析:
更改字符串编码的步骤为:
1、调用String的getByte方法对字符串进行解码,得到字符串的字节数组(字节数组不携带任何有关编码格式的信息,只有字符才有编码格式)
2、根据字节数组和新的字符编码构造一个新的String对象,得到的就是按照新的字符编码生成的字符串
一、关键技术点:
1、当前流行的字符编码格式有:US-ASCII、ISO-8859-1、UTF-8、UTF-16BE、UTF-16LE、UTF-16、GBK、GB2312等,其中GBK、GB2312是专门处理中文编码的。
2、String的getBytes方法用于按指定编码获取字符串的字节数组,参数指定了解码格式,如果没有指定解码格式,则按系统默认编码格式。
3、String的“String(bytes[] bs, String charset)”构造方法用于把字节数组按指定的格式组合成一个字符串对象
二、实例演示:
package book.String;
import java.io.UnsupportedEncodingException;
/** *//**
* 转换字符串的编码
* @author joe
*
*/
public class ChangeCharset ...{
/** *//** 7位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁块 */
public static final String US_ASCII = "US-ASCII";
/** *//** ISO拉丁字母表 No.1,也叫做ISO-LATIN-1 */
public static final String ISO_8859_1 = "ISO-8859-1";
/** *//** 8 位 UCS 转换格式 */
public static final String UTF_8 = "UTF-8";
/** *//** 16 位 UCS 转换格式,Big Endian(最低地址存放高位字节)字节顺序 */
public static final String UTF_16BE = "UTF-16BE";
/** *//** 16 位 UCS 转换格式,Litter Endian(最高地址存放地位字节)字节顺序 */
public static final String UTF_16LE = "UTF-16LE";
/** *//** 16 位 UCS 转换格式,字节顺序由可选的字节顺序标记来标识 */
public static final String UTF_16 = "UTF-16";
/** *//** 中文超大字符集 **/
public static final String GBK = "GBK";
public static final String GB2312 = "GB2312";
/** *//** 将字符编码转换成US-ASCII码 */
public String toASCII(String str) throws UnsupportedEncodingException ...{
return this.changeCharset(str, US_ASCII);
}
/** *//** 将字符编码转换成ISO-8859-1 */
public String toISO_8859_1(String str) throws UnsupportedEncodingException ...{
return this.changeCharset(str, ISO_8859_1);
}
/** *//** 将字符编码转换成UTF-8 */
public String toUTF_8(String str) throws UnsupportedEncodingException ...{
return this.changeCharset(str, UTF_8);
}
/** *//** 将字符编码转换成UTF-16BE */
public String toUTF_16BE(String str) throws UnsupportedEncodingException...{
return this.changeCharset(str, UTF_16BE);
}
/** *//** 将字符编码转换成UTF-16LE */
public String toUTF_16LE(String str) throws UnsupportedEncodingException ...{
return this.changeCharset(str, UTF_16LE);
}
/** *//** 将字符编码转换成UTF-16 */
public String toUTF_16(String str) throws UnsupportedEncodingException ...{
return this.changeCharset(str, UTF_16);
}
/** *//** 将字符编码转换成GBK */
public String toGBK(String str) throws UnsupportedEncodingException ...{
return this.changeCharset(str, GBK);
}
/** *//** 将字符编码转换成GB2312 */
public String toGB2312(String str) throws UnsupportedEncodingException ...{
return this.changeCharset(str,GB2312);
}
/** *//**
* 字符串编码转换的实现方法
* @param str 待转换的字符串
* @param newCharset 目标编码
*/
public String changeCharset(String str, String newCharset) throws UnsupportedEncodingException ...{
if(str != null) ...{
//用默认字符编码解码字符串。与系统相关,中文windows默认为GB2312
byte[] bs = str.getBytes();
return new String(bs, newCharset); //用新的字符编码生成字符串
}
return null;
}
/** *//**
* 字符串编码转换的实现方法
* @param str 待转换的字符串
* @param oldCharset 源字符集
* @param newCharset 目标字符集
*/
public String changeCharset(String str, String oldCharset, String newCharset) throws UnsupportedEncodingException ...{
if(str != null) ...{
//用源字符编码解码字符串
byte[] bs = str.getBytes(oldCharset);
return new String(bs, newCharset);
}
return null;
}
public static void main(String[] args) throws UnsupportedEncodingException ...{
ChangeCharset test = new ChangeCharset();
String str = "This is a 中文的 String!";
System.out.println("str:" + str);
String gbk = test.toGBK(str);
System.out.println("转换成GBK码:" + gbk);
System.out.println();
String ascii = test.toASCII(str);
System.out.println("转换成US-ASCII:" + ascii);
System.out.println();
String iso88591 = test.toISO_8859_1(str);
System.out.println("转换成ISO-8859-1码:" + iso88591);
System.out.println();
gbk = test.changeCharset(iso88591, ISO_8859_1, GBK);
System.out.println("再把ISO-8859-1码的字符串转换成GBK码:" + gbk);
System.out.println();
String utf8 = test.toUTF_8(str);
System.out.println();
System.out.println("转换成UTF-8码:" + utf8);
String utf16be = test.toUTF_16BE(str);
System.out.println("转换成UTF-16BE码:" + utf16be);
gbk = test.changeCharset(utf16be, UTF_16BE, GBK);
System.out.println("再把UTF-16BE编码的字符转换成GBK码:" + gbk);
System.out.println();
String utf16le = test.toUTF_16LE(str);
System.out.println("转换成UTF-16LE码:" + utf16le);
gbk = test.changeCharset(utf16le, UTF_16LE, GBK);
System.out.println("再把UTF-16LE编码的字符串转换成GBK码:" + gbk);
System.out.println();
String utf16 = test.toUTF_16(str);
System.out.println("转换成UTF-16码:" + utf16);
String gb2312 = test.changeCharset(utf16, UTF_16, GB2312);
System.out.println("再把UTF-16编码的字符串转换成GB2312码:" + gb2312);
}
}
输出结果:
str:This is a 中文的 String!
转换成GBK码:This is a 中文的 String!
转换成US-ASCII:This is a ?????? String!
转换成ISO-8859-1码:This is a ?????? String!
再把ISO-8859-1码的字符串转换成GBK码:This is a 中文的 String!
转换成UTF-8码:This is a ????? String!
转换成UTF-16BE码:周楳?猠愠????瑲楮朡
再把UTF-16BE编码的字符转换成GBK码:This is a 中文的 String!
转换成UTF-16LE码:桔獩椠?????匠牴湩Ⅷ
再把UTF-16LE编码的字符串转换成GBK码:This is a 中文的 String!
转换成UTF-16码:周楳?猠愠????瑲楮朡
再把UTF-16编码的字符串转换成GB2312码:?This is a 中文的 String!
三、源码分析:
更改字符串编码的步骤为:
1、调用String的getByte方法对字符串进行解码,得到字符串的字节数组(字节数组不携带任何有关编码格式的信息,只有字符才有编码格式)
2、根据字节数组和新的字符编码构造一个新的String对象,得到的就是按照新的字符编码生成的字符串
评论
1 楼
huoyj
2012-06-04
这文章写的有问题,getBytes()使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。而并不是不携带任何编码信息。
发表评论
-
String, StringBuffer, StringBuilder 举例探究效率
2014-03-20 13:28 1991在自己以往的学习及工作经验中,形成的概念: String ... -
Java QR code 二维码
2013-09-19 23:19 1447You can refer to http://ww ... -
java 读取大容量文件,内存溢出?
2012-09-23 11:19 7020java 读取大容量文件,内存溢出?怎么分段读取 法一:( ... -
JAVA取整
2012-02-10 09:54 1294舍掉小数取整:Math.floor(2 ... -
java中利用反射机制实现调用给定为字符串的方法名
2011-09-28 15:21 0Test.java public static void ... -
JavaBean 反射实现原理
2011-09-28 14:30 0package com.DB; import java. ... -
搜狗的一个笔试题
2011-09-21 16:24 1708以下程序是一个信息编码的程序,阅读其encode部分,并补全其 ... -
ArrayList Vector LinkedList 区别与用法
2011-09-10 11:46 920ArrayList 和Vector是 ... -
String类是否可以继承?
2011-09-10 10:56 3849问题1:String类是否可以继承? String类是 ... -
Java MD5加密
2011-09-18 22:21 3813呵呵,在网上查了看了很多,综合起来整理一个,先记下来以后用到了 ... -
java中subSequence方法和subString方法的区别
2011-08-01 09:30 8272根据JDK的文档,String.subSequence只 ... -
JAVA如何计算程序运行时间
2011-06-28 10:10 1429long t1=system.currentT ... -
java读取纯真IP数据库qqwry.dat的源代码
2011-06-27 09:31 2367java读取纯真IP数据库QQwry.dat的源代码,要运行此 ... -
SimpleDateFormat 类可以进行日期和字符串自由的转换
2011-06-18 16:46 1418JAVA中么创建"yyyy-MM-dd HH:mm: ... -
java 小方法
2011-05-19 10:55 926//***************************** ... -
Java_demo 定时器(2)
2011-05-17 14:40 2243本例依据Java自身提供的接口实现,通过监听器(Listene ... -
Java 定时器(1)
2011-05-17 14:19 1866Java定时器(java.util.Timer ... -
Java 反斜杠 斜杠 编译 转换
2011-05-17 10:54 2761package cn.rg.demo.test; impor ... -
Java split()用法
2011-04-28 13:48 1046Java split用法 java.lang.string. ... -
ResultSet
2011-04-27 15:08 892ResultSet 对象具有指向其当前数据行的光标。最初,光标 ...
相关推荐
java字符串编码转换和web中的字符串转换
java字符串的各种编码转换. java字符串的各种编码转换
总结了java中常见的utf-8、gbk等进行字符串编码转换
不需要关心接受的字符串编码是UTF_8还是GBK,还是ios-8859-1,自动转换为utf-8编码格式,无需判断字符串原有编码,用法://处理编码String newStr = GetEncode.transcode(oldStr);
Java字符串编码查询及转换,可将常用的一些编码格式转换成utf-8
字符串与各种编码之间相互转换,例如:字符串转base64,字符串转十六进制等等
JAVA字符串操作类CTool.java字符转换类,此类中收集Java编程中WEB开发常用到的一些工具。为避免生成此类的实例,构造方法被申明为private类型的。封装的功能:字符串从GBK编码转换为Unicode编码、对字符串进行md5...
主要介绍了java转换字符串编码格式的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
如何用java实现不同编码方式字符串的转换(包含异常处理、重复不终止输入、缓冲区bufferedreader的使用)
String 字符串操作工具类,sql防注入方法 过滤通过页面表单提交的字符 用特殊的字符连接字符串 将字符串数组转换为逗号链接的字符串,并且去掉最后一个逗号 分割字符串 字符串字符集转换 编码转换方法 将html文档...
/* java二进制,字节数组,字符,十六进制,BCD编码转换2007-06-07 00:17/** *//** * 把16进制字符串转换成字节数组 * @param hex * @return */
java+3des加密+和字符串转换
NULL 博文链接:https://wangchengyong.iteye.com/blog/891125
Java中文成Unicode码及从Unicode码转成中文
动态规划算法:从1到26分别对应a-z的每一个字母,输入一串数字的字符串,转换为字母,输出所有可能的字母序列。如123->abc、lc、aw 本资源是按照二叉树的思想解决该问题。从字符串的头部开始,每次可以取一个或者两...
判断字符串是否包含emoji表情
分享一个Java字符串操作类CTool.java源代码下载,包括了字符串转换功能,此类中收集Java编程中WEB开发常用到的一些工具。为避免生成此类的实例,构造方法被申明为private类型的。这个类的功能可实现将数据从数据库中...
Java 从网络中读取图片 转换成Base64字符串
关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换
比如字符串的查找替换操作、将字符串中的特殊字符转换成Web页中可以安全显示的字符串,转换字符串,从UTF-8到GBK的编码转换,从“GBK”到“ISO8859_1”的字符串转换,大文本块处理(将字符集转成ISO),String型变量...