- 浏览: 319730 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (299)
- 私人 (3)
- linux (22)
- web service (1)
- java applet (1)
- java (41)
- c# (1)
- socket (1)
- android (10)
- htc (1)
- root (1)
- ftp (3)
- 系统备份 (0)
- jquery (3)
- 图表 (1)
- 实用 (4)
- web (9)
- css (3)
- java applet mplayer (1)
- mplayer (4)
- javascript (8)
- eclipse (1)
- 正则表达式 (1)
- jmf (1)
- tomcat (6)
- 驱动 (1)
- 嵌入式 (1)
- usb (3)
- ffmpeg (1)
- player (1)
- encode (1)
- ajax (1)
- 单纯形复法 (1)
- rom (1)
- ndk (1)
- 打印 (1)
- vs2010 (2)
- myeclipse注册机 (1)
- c++ (5)
- capture (0)
- 串口 (1)
- windows (2)
- mingw (1)
- 网卡 (1)
- 绿色版 (1)
- cywin (1)
- x264 (1)
- 恢复文件 (1)
- servlet init 连数据库 (1)
- 51 单片机 (1)
- 操作系统 (1)
- vlc (3)
- 网线 (1)
- CListBox (1)
- mfc (1)
- setTimer (1)
- 分屏 (1)
- 供求信息 (1)
- 导航 (1)
- 批处理 (1)
- dos (1)
- mysql (5)
- MySQL新建用户 (1)
- demo (1)
- vc (1)
- webservice (1)
- 书签 (1)
- 浏览器 (1)
- spring mvc (1)
- excel (1)
- VPN (0)
- sql (1)
- pdf (3)
- arp (1)
- jsp (2)
- IE (1)
- html (1)
- test (3)
- httpclient (1)
- spring mvc 上传 (1)
- easyui (1)
- mybatis (1)
- spring (1)
- 微信 (1)
- weixin (2)
- pay (2)
- maven (2)
- fastdfs (2)
- ELK (2)
- logstash (1)
- rocketMQ (0)
- jmeter (0)
- 测试 (0)
- softether (0)
- util (0)
最新评论
-
ice24:
ftp client applet -
wuzijingaip:
499700647 写道你好,看了您的文章《ftp clien ...
ftp client applet -
zxcv193188:
感谢楼主
java JMF的使用 -
499700647:
你好,看了您的文章《ftp client aplet》很受启发 ...
ftp client applet -
JoeBaby_:
非常感谢,看文档的时候觉得JMF好难的样子,但是看过代码后思路 ...
java JMF的使用
package com.elmer.c; import java.io.UnsupportedEncodingException; public class GbktoUtf8 { public String convertString(String gbk){ String utf8 = ""; try { utf8 = new String(gbk2utf8(gbk),"UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return utf8; } public byte[] gbk2utf8(String chenese) { char c[] = chenese.toCharArray(); byte[] fullByte = new byte[3 * c.length]; for (int i = 0; i < c.length; i++) { int m = (int) c[i]; String word = Integer.toBinaryString(m); StringBuffer sb = new StringBuffer(); int len = 16 - word.length(); for (int j = 0; j < len; j++) { sb.append("0"); } sb.append(word); sb.insert(0, "1110"); sb.insert(8, "10"); sb.insert(16, "10"); String s1 = sb.substring(0, 8); String s2 = sb.substring(8, 16); String s3 = sb.substring(16); byte b0 = Integer.valueOf(s1, 2).byteValue(); byte b1 = Integer.valueOf(s2, 2).byteValue(); byte b2 = Integer.valueOf(s3, 2).byteValue(); byte[] bf = new byte[3]; bf[0] = b0; fullByte[i * 3] = bf[0]; bf[1] = b1; fullByte[i * 3 + 1] = bf[1]; bf[2] = b2; fullByte[i * 3 + 2] = bf[2]; } return fullByte; } public static void main(String[] args) { GbktoUtf8 gtu = new GbktoUtf8(); System.out.println(gtu.convertString("我是q !")); } }
核心是找的资料,还没放到web里试过
二.
public class TranCharset { private static final String PRE_FIX_UTF = "&#x"; private static final String POS_FIX_UTF = ";"; public TranCharset() { } /** * Translate charset encoding to unicode * * @param sTemp * charset encoding is gb2312 * @return charset encoding is unicode */ public static String XmlFormalize(String sTemp) { StringBuffer sb = new StringBuffer(); if (sTemp == null || sTemp.equals("")) { return ""; } String s = TranCharset.TranEncodeTOGB(sTemp); for (int i = 0; i < s.length(); i++) { char cChar = s.charAt(i); if (TranCharset.isGB2312(cChar)) { sb.append(PRE_FIX_UTF); sb.append(Integer.toHexString(cChar)); sb.append(POS_FIX_UTF); } else { switch ((int) cChar) { case 32: sb.append(" "); break; case 34: sb.append("""); break; case 38: sb.append("&"); break; case 60: sb.append("<"); break; case 62: sb.append(">"); break; default: sb.append(cChar); } } } return sb.toString(); } /** * 将字符串编码格式转成GB2312 * * @param str * @return */ public static String TranEncodeTOGB(String str) { try { String strEncode = TranCharset.getEncoding(str); String temp = new String(str.getBytes(strEncode), "GB2312"); return temp; } catch (java.io.IOException ex) { return null; } } /** * 判断输入字符是否为gb2312的编码格式 * * @param c * 输入字符 * @return 如果是gb2312返回真,否则返回假 */ public static boolean isGB2312(char c) { Character ch = new Character(c); String sCh = ch.toString(); try { byte[] bb = sCh.getBytes("gb2312"); if (bb.length > 1) { return true; } } catch (java.io.UnsupportedEncodingException ex) { return false; } return false; } /** * 判断字符串的编码 * * @param str * @return */ public static String getEncoding(String str) { String encode = "GB2312"; try { if (str.equals(new String(str.getBytes(encode), encode))) { String s = encode; return s; } } catch (Exception exception) { } encode = "ISO-8859-1"; try { if (str.equals(new String(str.getBytes(encode), encode))) { String s1 = encode; return s1; } } catch (Exception exception1) { } encode = "UTF-8"; try { if (str.equals(new String(str.getBytes(encode), encode))) { String s2 = encode; return s2; } } catch (Exception exception2) { } encode = "GBK"; try { if (str.equals(new String(str.getBytes(encode), encode))) { String s3 = encode; return s3; } } catch (Exception exception3) { } encode = "BIG5"; try { if (str.equals(new String(str.getBytes(encode), encode))) { String s4 = encode; return s4; } } catch (Exception exception3) { } return ""; } public static void main(String args[]) { System.out.println(XmlFormalize("下载")); } }
package com.lang.string; public class ConverFromGBKToUTF8 { public static void main(String[] args){ try { ConverFromGBKToUTF8 convert = new ConverFromGBKToUTF8(); String chenese = "我是我我们"; byte [] fullByte = convert.gbk2utf8(chenese); String fullStr = new String(fullByte, "UTF-8"); System.out.println("string from GBK to UTF-8 byte: " + fullStr); } catch (Exception e) { e.printStackTrace(); } } public byte[] gbk2utf8(String chenese){ char c[] = chenese.toCharArray(); byte [] fullByte =new byte[3*c.length]; for(int i=0; i<c.length; i++){ int m = (int)c[i]; String word = Integer.toBinaryString(m); // System.out.println(word); StringBuffer sb = new StringBuffer(); int len = 16 - word.length(); //补零 for(int j=0; j<len; j++){ sb.append("0"); } sb.append(word); sb.insert(0, "1110"); sb.insert(8, "10"); sb.insert(16, "10"); // System.out.println(sb.toString()); String s1 = sb.substring(0, 8); String s2 = sb.substring(8, 16); String s3 = sb.substring(16); byte b0 = Integer.valueOf(s1, 2).byteValue(); byte b1 = Integer.valueOf(s2, 2).byteValue(); byte b2 = Integer.valueOf(s3, 2).byteValue(); byte[] bf = new byte[3]; bf[0] = b0; fullByte[i*3] = bf[0]; bf[1] = b1; fullByte[i*3+1] = bf[1]; bf[2] = b2; fullByte[i*3+2] = bf[2]; } return fullByte; } }
JAVA字符编码系列二:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换
1、函数介绍
在Java中,字符串用统一的Unicode编码,每个字符占用两个字节,与编码有关的两个主要函数为:
1)将字符串用指定的编码集合解析成字节数组,完成Unicode-〉charsetName转换
public byte[] getBytes(String charsetName) throws UnsupportedEncodingException
2)将字节数组以指定的编码集合构造成字符串,完成charsetName-〉Unicode转换
public String(byte[] bytes, String charsetName) throws UnsupportedEncodingException
2、Unicode与各编码之间的直接转换
下面以对中文字符串"a中文"的编码转换为例,来了解各种编码之间的转换
1)Unicode和GBK
测试结果如下,每个汉字转换为两个字节,且是可逆的,即通过字节可以转换回字符串
String-GBK〉ByteArray:\u0061\u4E2D\u6587(a中文)-〉0x61 0xD6 0xD0 0xCE 0xC4
ByteArray-GBK〉String:0x61 0xD6 0xD0 0xCE 0xC4-〉\u0061\u4E2D\u6587(a中文)
2)Unicode和UTF-8
测试结果如下,每个汉字转换为三个字节,且是可逆的,即通过字节可以转换回字符串
String-UTF-8〉ByteArray:\u0061\u4E2D\u6587(a中文)-〉0x61 0xE4 0xB8 0xAD 0xE6%0x96 0x87
ByteArray-UTF-8〉String:0x61 0xE4 0xB8 0xAD 0xE6%0x96 0x87-〉\u0061\u4E2D\u6587(a中文)
3)Unicode和ISO-8859-1
测试结果如下,当存在汉字时转换失败,非可逆,即通过字节不能再转换回字符串
String-ISO-8859-1〉ByteArray:\u0061\u4E2D\u6587(a中文)-〉0x61 0x3F 0x3F
ByteArray-ISO-8859-1〉String:0x61 0x3F 0x3F-〉\u0061\u003F\u003F(a??)
3、Unicode与各编码之间的交叉转换
在上面直接转换中,由字符串(Unicode)生成的字节数组,在构造回字符串时,使用的是正确的编码集合,如果使用的不是正确的编码集合会怎样呢?会正确构造吗?如果不能正确构造能有办法恢复吗?会信息丢失吗?
下面我们就来看看这种情况,这部分可以说明在某些情况下虽然我们最终正确显示了结果,但其间仍然进行了不正确的转换。
1)能够正确显示的中间不正确转换
我们知道String-GBK〉ByteArray-GBK〉String是正确的,但如果我们采用String-GBK〉ByteArray-ISO-8859-1〉String呢?通过测试结果如下:
String-GBK〉ByteArray-ISO-8859-1〉String:\u0061\u4E2D\u6587(a中文)-〉0x61 0xD6 0xD0 0xCE 0xC4-〉\u0061\u00D6\u00D0\u00CE\u00C4(a????)
这时我们得到的字符串为?乱码“a????”,但是通过继续转换我们仍然可以复原回正确的字符串“a中文”,过程如下:
String-GBK〉ByteArray-ISO-8859-1〉String-ISO-8859-1〉ByteArray-GBK〉String
对应:\u0061\u4E2D\u6587(a中文)-〉0x61 0xD6 0xD0 0xCE 0xC4-〉\u0061\u00D6\u00D0\u00CE\u00C4(a????)-〉0x61 0xD6 0xD0 0xCE 0xC4-〉\u0061\u4E2D\u6587(a中文)
也就是我们在首次构造字符串时,我们用了错误的编码集合得到了错误的乱码,但是我们通过错上加错,再用错误的编码集合获取字节数组,然后再用正确的编码集合构造,就又恢复了正确的字符串。这时就属于是“能够正确显示的中间不正确转换”。在Jsp页面提交数据处理时常常发生这种情况。
此外能够正确显示的中间不正确转换还有:
String-UTF-8〉ByteArray-ISO-8859-1〉String-ISO-8859-1〉ByteArray-UTF-8〉String
和
String-UTF-8〉ByteArray-GBK〉String-GBK〉ByteArray-UTF-8〉String
对应:\u0061\u4E2D\u6587(a中文)-〉0x61 0xE4 0xB8 0xAD 0xE6%0x96 0x87-〉\u0061\u6D93\uE15F\u6783(a涓枃)-〉0x61 0xE4 0xB8 0xAD 0xE6%0x96 0x87-〉\u0061\u4E2D\u6587(a中文)
4、编码过程中错误诊断参考
1)一个汉字对应一个问号
在通过ISO-8859-1从字符串获取字节数组时,由于一个Unicode转换成一个byte,当遇到不认识的Unicode时,转换为0x3F,这样无论用哪种编码构造时都会产生一个?乱码。
2)一个汉字对应两个问号
在通过GBK从字符串获取字节数组时,由于一个Unicode转换成两个byte,如果此时用ISO-8859-1或用UTF-8构造字符串就会出现两个问号。
若是通过ISO-8859-1构造可以再通过上面所说的错上加错恢复(即再通过从ISO-8859-1解析,用GBK构造);
若是通过UTF-8构造则会产生Unicode字符"\uFFFD",不能恢复,若再通过String-UTF-8〉ByteArray-GBK〉String,则会出现杂码,如a锟斤拷锟斤拷
3)一个汉字对应三个问号
在通过UTF-8从字符串获取字节数组时,由于一个Unicode转换成三个byte,如果此时用ISO-8859-1构造字符串就会出现三个问号;用GBK构造字符串就会出现杂码,如a涓枃。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/qinysong/archive/2006/09/05/1179489.aspx
发表评论
-
java 线程池
2018-08-07 11:26 293package com.fx.test; impor ... -
ftppool-demo
2018-05-24 09:16 285ftp pool demo -
java 遍历文件夹和文件
2018-03-28 11:39 425public static void trave ... -
java 流写入本地文件
2018-03-27 10:17 765private static void wr ... -
java 字符串转为流
2018-03-27 10:03 452public static Inpu ... -
ftputil + ftpclientPOOL
2018-03-22 14:39 357ftputil + ftpclientPOOL -
微信支付网上找的Demo
2017-06-22 17:58 269微信支付网上找的Demo,当时做支付时有些地方就参考了他,作者 ... -
Jsoup get post
2016-12-21 17:11 357package com.test; import ... -
java 面包屑导航
2016-10-24 15:08 444类似面包屑导航,抛砖引玉 后台维护一个访问路径的列表 ... -
获取n年前日期
2016-03-08 14:42 492/** * 获取n年前日期 ... -
httpclient访问需要登录才能访问的数据
2015-04-23 22:10 542package com.grkj.modules.tree ... -
jsp获取uri 以及绝对路径
2014-07-01 17:06 476得到从根路径到当前jsp页面的路径: request.ge ... -
JAVA导出PDF实例
2014-05-13 14:39 855一、直接导出成PDF Java代码 ... -
Java HTML直接导出PDF
2014-05-13 12:18 1144Java HTML直接导出PDF 对于java中如何从h ... -
java生成PDF
2014-05-13 12:11 444一、前言 在企业 ... -
linux下JAVA环境变量的设置
2014-03-21 14:05 500在终端中输入命令 vi /etc/profile.d/j ... -
Java读取Excel内容
2014-02-20 16:34 512所需jar 下后面 import java.io.B ... -
myeclipse9
2012-08-28 16:13 669import java.io.BufferedReader; ... -
java 打印
2012-08-07 18:03 899import java.awt.BasicStroke; ... -
java 数独游戏生成
2012-07-18 09:47 720/** * 数独程序 */ public c ...
相关推荐
将文件编码从GBK转换为UTF8 ...$ gbk2utf8 # converting from gbk2 to utf8 Usage: Gbk2Utf8 <src> <dst> [include-extension (default 'java')] $ gbk2utf8 convert Usage: Gbk2Utf8 <src> <dst-u
6.0.0 UTF-8 Release 20101028 二、安装步骤 ============ 1. 将EasyJspRun6.0下载并上传到Linux主机; 2. 以root身份登录主机,执行tar xzvf EasyJspRun6.0.tar.gz 解包; 3. 进入EasyJspRun6.0目录,并执行....
修正之前版本一些UTF-8转换后乱码的Bug 附上NChardet源码 可用于转换java文件为指定格式编码工具(内付源码),自动检测文件的编码类型
文本(文件+网页)编码检测java library, cpdetector_1.0.10. ...关于java中GBK与UTF-8编码的转换 及 利用 cpdetector开源框架检测编码的方法参看: https://blog.csdn.net/jhsword/article/details/93618735
将GBK编码转换成utf-8编码 Java实现
FIXME How to judge UTF-8 and GBK, the * correct code should be: FileReader fr = new FileReader(new * InputStreamReader(fileName, "ENCODING")); Might let the user select the * encoding would be ...
ueditor1_2_5资源下载,包含Java,.net,php三种语言,gbk,utf-8两种编码总共五个版本,
支援多種編碼(Big5,GBK,UTF-8/16/32)並可隨時改變編碼、 十六進位/區塊模式、 正規表示式搜尋/取代。 MadEdit 目前在 Linux 與 Win32 平台上都可執行, 也有中文語系檔,對中文支援良好。 介面簡單清爽,開啟程式...
6.0.0 UTF-8 Release 20101028 二、安装步骤 ============ 1. 将EasyJspRun6.0下载并上传到Linux主机; 2. 以root身份登录主机,执行tar xzvf EasyJspRun6.0.tar.gz 解包; 3. 进入EasyJspRun6.0目录,并执行....
比如说我想把用GBK编码的/home/user/uchome目录下的文件全部转码为UTF8,转码之后的文件存储在/home/user/uchome2,那么命令为 java -jar "encoding.jar" /home/user/uchome /home/user/uchome2 GBK
这两个字符集不能通过像Unicode在UTF-8和UTF-16之间所做的操作来直接互换。 它们基于具有不同汉字顺序的不同编码(ASCII / EBCDIC)。 ICU( )支持两种字符集,但占用空间很大。 这是一种占地面积小,快速的解决...
2、导入系统后请将系统编码设置为UTF-8,不是GBK。SQL导入也是UTF8编码。 3、导入后如果出现感叹号,请修改实际的Java Build Path。 4、登录页面 4.2、Mybatis版本访问地址:MySQL版本和Oracle版本都是...
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <servlet-name>...
//我将文件名getBytes()下,将GBK改成UTF-8。测试了下,貌似没问题, //突然有一次上传一文件时,发现最后几个字乱码,一直是??。在拿些文件测试, // 后来知道了是当文件名为中文奇数时,会乱码,而且还上传不了。...
4、 默认 PLSQL Developer 连接 Oracle 使用客户端字符集 utf-8 , 基于工具使用 SQL 插入中文有乱码问题,设置客户端字符集 gb2312 配置 环境变量 NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK ...
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> ...
sequence 序列,对应java 里的list 、数组等非键值对的集合 hash 键值对的集合 namespace 对一个ftl 文件的引用, 利用这个名字可以访问到该ftl 文件的资源 B 指令 if, else, elseif 语法 Java代码 ...
import java.io.File; import java.util.Map; import javax.mail.Message.RecipientType; /** * MailServices 邮件接收发送接口定义类 * * @author 380595305@qq.com * Date 2010-05-11 * @version 1.0 */ public...
面向对象的思想方法已经非常流行了,在编程语言(例如java,js)中,都运用面向对象的编程思想。在XML中,就是要将网页也作为一个对象来操作和控制,我们可以建立自己的对象和模板。与对象进行交流,如何命令对象,...