「java解码类」url解码 java
今天给各位分享java解码类的知识,其中也会对url解码 java进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、求java编码和解码的通俗解释
- 2、在Java中如何进行BASE64编码和解码
- 3、java中编码与解码分别指什么?
- 4、java 中如何查看字符串的编码类型
- 5、java解码部分程序。帮忙写下注释~
求java编码和解码的通俗解释
在内存中,本来没有字符的概念,每个字节都是一个0-255的数字。我们把数字进行编号,每个数字代表一个字符。追根溯源,以ASCII码为例。比如65(十进制)定义为字符'A',66定义为'B',61定义为'='。这就是编码。然后才有了char型定义,实际上等同于byte,只是使用char型时就知道要表示的是字符。如果char ch=65,然后printf("%c",ch),出来就是'A',这就是解码了。如果printf("%d",ch),那出来就仍是65。 单字节byte只能支持0-255的编码,对于亚洲语言,像中文汉字,是完全不够用的。所以之后有双字节(0-65535)以及多字节编码的出现。以双字节为例,0-65535并不能同时为多种语言编码。所以打个比方,同一个数字,可能在中文GBK编码时定义为汉字'王',而在日文编码MS932中就被定义为'小'。当内存中的数字被解释为字符(文字和符号)时,就是解码过程,把文字和符号用数字定义时就是编码。实际编码过程中,不少是前后字节有关联性定义的,并非我说的那么简单。 在网络传输时,实际上仍然是单字节,甚至是字节中1个bit一个bit传输的。我们在传输时使用byte数组,即基本类型,而在传输前后转回GBK中文编码。以老美的视角来看问题,则从byte变成亚洲语言(GBK/Unicode)属于编码encoding,而相反过程是解码decoding。
在Java中如何进行BASE64编码和解码
import sun.misc.BASE64Encoder;
import sun.misc.BASE64Decoder;
// 将 s 进行 BASE64 编码
public static String getBASE64(String s) {
if (s == null) return null;
return (new sun.misc.BASE64Encoder()).encode( s.getBytes() );
}
// 将 BASE64 编码的字符串 s 进行解码
public static String getFromBASE64(String s) {
if (s == null) return null;
BASE64Decoder decoder = new BASE64Decoder();
try {
byte[] b = decoder.decodeBuffer(s);
return new String(b);
} catch (Exception e) {
return null;
}
}
java中编码与解码分别指什么?
java中编码:URLEncoder.encode(strUri,"utf-8");
java中解码码:URLDecoder.decode(strUri,"utf-8");
java编码和解码
流读取文件,具有转换编码功能的有:OutputStreamWriter和InputStreamReader,
构造器有如:
InputStreamReader(InputStream in, String charsetName)
创建使用指定字符集的 InputStreamReader。
OutputStreamWriter(OutputStream out, String charsetName)
创建使用指定字符集的 OutputStreamWriter。
处理字符串编码问题:
重新对获取的字符串进行编码:Byte[] bytes = str.getBytes(String encodeCharsetNam);
重新对bytes进行解码,创建新的字符串对象:str = new String(Byte[] bytes,String decodeCharsetName);
一般结合使用:str = new String(str.getBytes(String encodeCharsetName),String decodeCharsetName);
例如:resultName=new String(username.getBytes("ISO-8859-1"),"UTF-8");
还可以加入判断:
if(!Charset.forName("gbk").newEncoder().canEncode(str)){str = new Strin(str.getBytes("ISO-8859-1"),"UTF-8");}else{str = new String(str.getBytes("ISO-8859-1"),"gbk");}
处理请求参数传递编码问题:
java中编码:URLEncoder.encode(strUri,"utf-8");
java中解码码:URLDecoder.decode(strUri,"utf-8");
js中编码:encodeURIComponent(strUri);encodeURI(strUri);escape(str);
js中解码:decodeURIComponent(strUri);decodeURI(strUri);unescape(str);
补充概念:
URI组件:主机、端口、路径、查询参数、片段等。
URI组件分隔符::/?#[]@,冒号用于分隔协议和主机,/用于分隔主机和 路径,?用于分隔路径和查询参数,用于分隔多个查询参数等。
URI中的不安全字符或保留字符: ! * ‘ ( ) ; : @ = + $ , / ? # [ ] 他们具有特殊作用,例如上面的分隔作用。
URI允许出现的字符:只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符,其他字符均需要经过编码之后才能出现在Url中,比如使用保留字符的原意,而不是特殊作用。
js向java/jsp的编码与解码:
js中编码:encodeURI(encodeURI(strUri));decodeURIComponent(decodeURIComponent(strUri));
java/jsp中解码: java.net.URLDecoder.decode(strUri,"UTF-8");
js中编码两次的问题:如果使用一次编码,在浏览器地址栏里,浏览器认为%是个转义字符,浏览器会把%与%之间的编码值,两位两位取出后进行解码。
然后再传递给处理页面,然后由处理页面进行再次解码,这样前面就缺少了一次编码过程,所以前面需要连续两次编码。
java 中如何查看字符串的编码类型
可以通过以下方法来进行编码格式判断,输入一个字符串,之后返回字符串编码类型。
public static String getEncoding(String str) {
String encode = "GB2312";
try {
if (str.equals(new String(str.getBytes(encode), encode))) { //判断是不是GB2312
String s = encode;
return s; //是的话,返回“GB2312“,以下代码同理
}
} catch (Exception exception) {
}
encode = "ISO-8859-1";
try {
if (str.equals(new String(str.getBytes(encode), encode))) { //判断是不是ISO-8859-1
String s1 = encode;
return s1;
}
} catch (Exception exception1) {
}
encode = "UTF-8";
try {
if (str.equals(new String(str.getBytes(encode), encode))) { //判断是不是UTF-8
String s2 = encode;
return s2;
}
} catch (Exception exception2) {
}
encode = "GBK";
try {
if (str.equals(new String(str.getBytes(encode), encode))) { //判断是不是GBK
String s3 = encode;
return s3;
}
} catch (Exception exception3) {
}
return ""; //如果都不是,说明输入的内容不属于常见的编码格式。
}
java解码部分程序。帮忙写下注释~
//在连连看中,在合适的条件下,点到两个相同的图形时,这两个图形会消失,相当于删除这两个图形
//删除方法
private void delete(Point p1,final Point p2 , boolean bDelete){
//删除位置坐标列表的声明和实例化
ArrayListPoint points=new ArrayListPoint();
//当两个图形之间可直线连接时
if(corner1==null){
//将第一个图形加入删除列表
points.add(p1);
//将第二个图形加入删除列表
points.add(p2);
}//当只有一个拐弯时
else if(corner2==null){
points.add(p1);
points.add(corner1);
points.add(p2);
}//当有两个拐弯时
else{
if(p1.x!=corner1.xp1.y!=corner1.y){
Point pt=corner1;
corner1=corner2;
corner2=pt;
}
points.add(p1);
//将第一个拐角加入删除列表
points.add(corner1);
points.add(corner2);
points.add(p2);
}
//如果拐角多余两个,撤销选中目标
if(bDelete){
delete(p1); delete(p2);
}
//执行删除事件
notifyEffect(points);
}
//获取图形列数
public int getCols() {
return cols;
}
/*
* p 原点
*横向空白点(包括与原点等值的点)
*/
//横向连线路径获取
private ArrayListPoint getHSpaces(Point p,Point pg){
ArrayListPoint ps=new ArrayListPoint();
//左边空白点坐标
for(int dif=1; ;dif++){
//左边空白点y值
int col=p.y-dif;
//左边空白点x值
int row=p.x;
//如果已经完成或只有一列的情况,返回循环
if(col0||(data[row][col]!=0!pg.equals(new Point(row,col)))) break;
//将空白点行列添加进数组列表
ps.add(new Point(row,col));
}
//后面的和前面的类似了
//右边空白点坐标
for(int dif=1; ;dif++){
int col=p.y+dif;
int row=p.x;
if(col=cols||(data[row][col]!=0!pg.equals(new Point(row,col)))) break;
ps.add(new Point(row,col));
}
return ps;
}
public int[][] getMaps(){
return data;
}
public int getRows() {
return rows;
}
public Point getSltMatrix() {
return sltMatrix;
}
/*
* p 原点
*纵向空白点(包括与原点等值的点)
*/
//纵向连线路径获取
private ArrayListPoint getVSpaces(Point p,Point pg)
{
ArrayListPoint ps=new ArrayListPoint();
//左
for(int dif=1; ;dif++){
int col=p.y;
int row=p.x-dif;
if(row0||(data[row][col]!=0!pg.equals(new Point(row,col)))) break;
ps.add(new Point(row,col));
}
//右
for(int dif=1; ;dif++){
int col=p.y;
int row=p.x+dif;
if(row=rows||(data[row][col]!=0!pg.equals(new Point(row,col)))) break;
ps.add(new Point(row,col));
}
return ps;
}
java解码类的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于url解码 java、java解码类的信息别忘了在本站进行查找喔。
发布于:2022-12-17,除非注明,否则均为
原创文章,转载请注明出处。