- 浏览: 1042146 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
wenson:
lzjzy520 写道 求 项目完整元代码已经够清楚了,看不懂 ...
使用Spring JavaMail发送邮件总结 -
lzjzy520:
求 项目完整元代码
使用Spring JavaMail发送邮件总结 -
xiejx618:
能提高多大的性能? 不能用数据来说话吧希望你能用jmeter做 ...
利用APR本地库提高Tomcat性能 -
mrwalter:
学习了,挺好用的,局域网内速度很快
ssh远程文件传输命令scp -
wcily123:
不错
ssh远程文件传输命令scp
无论是对程序的本地化还是国际化,都会涉及到字符编码的转换的问题。尤其在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对象,得到的就是按照新的字符编码生成的字符串
此文转自:http://blog.csdn.net/zhouyong80/archive/2007/11/24/1900100.aspx
发表评论
-
glusterfs2配置要点(动态增加client)
2012-10-25 11:12 1197如果打算做cluster/replicate的备份,se ... -
haproxy的日志问题
2012-08-21 12:45 2035在haproxy.cfg的global里添加日志配置: lo ... -
gluster3.2.x的安装配置
2012-04-19 19:00 4125一、 GlusterFS ... -
varnish下使用acl限制ip地址访问
2011-12-29 17:43 1907第1步:定义ACL,我们使用一个外部文件存储IP地址 acl ... -
解决Linux操作系统下AES解密失败的问题:javax.crypto.BadPaddingException: Given final block not p
2011-12-14 00:56 6408现象描述: windows上加解密 ... -
svn的恢复与删除操作
2011-10-19 20:05 2406svn的恢复与删除操作—— 一、本地删除 本地删除, ... -
svn的兩個錯誤解決記錄
2011-08-31 12:05 13361、405 Method Not Allowed 开始 ... -
扫盲:什么是ARP ?
2010-11-03 10:28 1187ARP,即地址解析协议 ,实现通过IP地址 得知其物理地址 ... -
看到一大堆人在发帖找工作,而我们却招不到人
2010-07-09 12:17 1569每天在JE里看到一大堆人发帖找工作,什么晒简历,谈面试经历,似 ... -
Grinder资料收集
2010-02-12 01:47 2883什么是 Grinder ? ... -
HTTP 1.1状态代码及其含义
2010-02-08 18:12 1356下表显示了常见的HTTP 1. ... -
解决java.net.SocketException: Invalid argument or cannot assign requested address
2010-01-23 18:04 11579今天发现facebook app读取facebook上的api ... -
使用X-UA-Compatible来设置IE8兼容模式
2009-12-21 07:50 1426英文原文:http://msdn.microsoft.co ... -
你能靠自己脑筋玩通关这游戏你就真聪明绝顶了!
2008-12-08 15:27 1529你能靠自己脑筋玩通关这游戏吗?别Google、Baidu哦! ... -
OSCache使用介紹
2008-10-16 15:21 2967一.OSCache简介 OSCache是OpenSym ... -
说说Java接口的通俗理解
2008-01-20 02:52 3168今天在Chinajavaworld中看到一则对Java接口理解 ... -
DNS解析错误解决办法
2007-11-26 11:31 12451我們在上網过程中可能会遇到DNS解析错误的问题 ... -
我们是白领吗?
2007-11-05 15:52 3810刚看到一则新闻,说是对白领的标准定义的—— 所谓的金领、白领、 ... -
终端服务器超出最大允许连接数的解决办法
2007-10-17 15:58 2321服务器终端服务器超出最大允许连接数时,以前考虑用冷启动服务器, ... -
Tomcat訪問MS SQL被拒絕的問題
2007-09-28 00:36 2317這兩天架設一個項目,使用tomcat,需要連接MSSQL,一直 ...
相关推荐
3.支持字符串转java.util.Date 支持字符串格式: yyyyMMdd yyyyMMddHH yyyyMMddHHmm yyyyMMddHHmmss yyyy-MM-dd yyyy.MM.dd yyyy/MM/dd yyyy MM dd 年月日格式可以和下面的交换 yyyyMMdd HH yyyyMMdd HHmm ...
【IT专家】在Java中,JSON解析器自动将字符串转换为数字-整数。.docx【IT专家】在Java中,JSON解析器自动将字符串转换为数字-整数。.docx
【IT专家】在Java中,JSON解析器自动将字符串转换为数字-整数。.pdf【IT专家】在Java中,JSON解析器自动将字符串转换为数字-整数。.pdf
Java库将suuji(数字)字符串转换为数值 设置 将以下依赖项添加到pom.xml : < groupId>jp.co.bizreach < artifactId>suuji-converter < version>1.0.0 用法 您可以使用jp.co.bizreach.suuji.SuujiConverter...
使用自定义了时间和字符串的转换规则 存的时候 存字符串 读取的时候 转换为日期类型 但是在按时间查找的时候 也可以使用 下载后 直接运行 Test类 修改下MongodbConfiguration的mongoUrl 写的时候将时间转为字符串 ...
客户要求,ID列的数据类型必须是uniqueidentifier,一开始实体类的ID设计成java.lang.String类型;映射文件中ID的增长方式是uuid.hex private java.lang.String id; public java.lang.String getId(){ return id; }...
Ascii码转换器(java环境用的) 不到1M 方便小巧 可输入转换 也可转换文件
srt字幕转换成vtt的一个小工具,基本上是替换字符,需要.net4.5。功能简单,把srt字幕的文本内容,一些标点符号进行了替换。
C# To Java converter是一款将C#代码片段或者C#项目转换为JAVA的工具。 转换所有版本的C#代码 评估所有引用的程序集和.NET项目,以便更完整地...允许自定义替换最终转换代码中的字符串 准确甚至格式不正确的C#代码
* 从json数组中解析出java字符串数组 * @param jsonString * @return */ /** *//** * 从json数组中解析出javaLong型对象数组 * @param jsonString * @return */ /** *//** * 从json数组中解析出java ...
这个小辅助函数允许获取 Matlab 类实例的字符串表示。 主要特点是作为对象的属性被递归转换。 递归级别由制表符表示。 最大深度是可定义的,但会自动处理无限循环。 有关更详细的对象分析,请检出UIInspect(#...
2. 使用java.text.MessageFormat中的字符串格式,格式为{ 参数序号(从0开始), 格式类形(number | date | time | choice), 格式样式},例如: validation.between=Date must between {0, date, short} and {1, ...
实现阿拉伯数字转化为大写汉字;eg:1200->壹仟贰佰元整
8.4 实验3 字符串的比较和查找最长子串 8.5 实验4 单词逆向输出问题 8.6 实验5 ISBN书号校验问题 第9章 Applet小应用程序 9.1 预备知识 9.2 实验1 Applet生命周期 9.3 实验2 Applet的参数提取 9.4 实验3 鼠标...
μFASA(μJS有限状态自动机字符串分析器)是一种基于静态解释的字符串静态分析器,用于JavaScript的子语言μJS的跨过程版本。 有关μFASA的完整详细信息,请参见第七届国际验证和程序转换研讨会(VPT 2019)上介绍...
lang和lang3这两个包里有转换所需的工具类 org.jsoup jsoup 1.11.3 commons-lang commons-lang 2.6 org.apache.commons commons-lang3 3.4 第二步:直接使用即可: import org.apache.commons.lang....
将整数数据类型转换为二进制字符串,然后再返回到Matlab中。 版本1.0、2016年4月10日 下载资料库: 以字符串形式返回X的二进制表示形式。 X必须是整数数据类型且非负。 与Matlab不同, int2bin支持大于2^52的X int64...
软件名称:CodeConverter v1.0┊码制转换器┊日常进制编码转换,特别适合于Java程序员 软件大小:214KB 软件类型:绿色免费软件 适用平台:Windows 作 者:Meron 作者邮箱:meronmee@163.com 软件截图: 软件简介...
XML 元素中,"和 "&" 是非法的。"会产生错误,因为解析器会把该字符解释为新元素的开始。"&" 也会产生错误,因为解析器会把该字符解释...[CDATA[文本内容]]>CDATA的文本内容中不能出现字符串“]]>”,另外,CDATA不能嵌套。
ArrayString.java 字符串数组 assignTwoDime.java 为二维数组赋值 getMaxElem.java 获取数组中的最大元素 incCapicity.java 演示StingBuffer的容量增长 SortDemo.java 排序示例 travelTwoDime.java 遍历二维...