📄 decode.java
字号:
//package mypub;
import java.io.*;
public class Decode
{
static int num=0;
public char DecodeAscII(String hex) //八位,一个字节,
{
StringToInt to=new StringToInt();
int i=to.HexStringToInt(hex);//调用HexStringToInt
return (char)i;
}
public String DecodeGB2312(String in)
{
StringToInt to=new StringToInt();
String a=String.valueOf(in.charAt(0));
String b=String.valueOf(in.charAt(1));
String hex=a+b;
int i=to.HexStringToInt(hex);
String c=String.valueOf(in.charAt(2));
String d=String.valueOf(in.charAt(3));
hex=c+d;
int j=to.HexStringToInt(hex);
byte bytes[] = {(byte)i,(byte)j};
String s="";
try
{
s=new String(bytes,"gb2312");
}
catch(UnsupportedEncodingException e)
{
System.out.println (e.toString());
}
return s;
}
public String Decodebig5(String in)
{
StringToInt to=new StringToInt();
String a=String.valueOf(in.charAt(0));
String b=String.valueOf(in.charAt(1));
String hex=a+b;
int i=to.HexStringToInt(hex);
String c=String.valueOf(in.charAt(2));
String d=String.valueOf(in.charAt(3));
hex=c+d;
int j=to.HexStringToInt(hex);
byte bytes[] = {(byte)i,(byte)j};
String s="";
try
{
s=new String(bytes,"big5");
}
catch(UnsupportedEncodingException e)
{
System.out.println (e.toString());
}
return s;
}
public String DecodeUTF(String s) //传过来的是16进制
{
UnicodeStringToInt toInt=new UnicodeStringToInt();
String r="";
int len=s.length();
for(int i=0;i<len;i+=6)
{
String temp="";
String a=String.valueOf(s.charAt(i+0));
String b=String.valueOf(s.charAt(i+1));
String hex=a+b;
int x=toInt.UnicodeStringToInt(hex);
a=String.valueOf(s.charAt(i+2));
b=String.valueOf(s.charAt(i+3));
hex=a+b;
int y=toInt.UnicodeStringToInt(hex);
a=String.valueOf(s.charAt(i+4));
b=String.valueOf(s.charAt(i+5));
hex=a+b;
int z=toInt.UnicodeStringToInt(hex);
byte bytes[] = {(byte)x,(byte)y,(byte)z};
try
{
temp=new String(bytes,"utf-8");
}
catch(UnsupportedEncodingException e)
{
System.out.println (e.toString());
}
r=r+temp;
}
return r;
}
public String ToDecode(String input) //第一步
{
Decode d=new Decode();
String result="",h="";
if(input=="")return result;
int count=0;
int len=input.length();
String hex[]=new String[len/2];
EncodeMethod m=new EncodeMethod(); //EncodeMethod
String method=m.method(input);
int num=0;
for(int i=0;i<input.length();i+=2)
{ String temp="";
temp=temp+String.valueOf(input.charAt(i));
temp=temp+String.valueOf(input.charAt(i+1));
hex[num]=temp;//num表示字节的个数
num++;
}
if(method=="big5")
{
for(int j=0;j<num;j++)//每次加一个字节
{
char c=hex[j].charAt(0);
char e=hex[j].charAt(1);
switch(c)
{
case '8':
case '9':
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
{
int i=j+1;
char u=hex[i].charAt(0);
char v=hex[i].charAt(1);
if(u>='4'&&u<='7'||u>='A'&&u<='F')
{
String str=hex[j]+hex[i];//两个字节16位,呵呵
result=result+d.Decodebig5(str);
}
else
{
result=result+d.DecodeAscII(hex[j]);
result=result+d.DecodeAscII(hex[i]);
}
++j;
} break;//为什么是高8位是从8开始呢?因为0x80~0xFF是中文字符表示范围
default:result=result+d.DecodeAscII(hex[j]);break;
}
}
}
if(method=="gb2312")
{
for(int j=0;j<num;j++)
{
char c=hex[j].charAt(0);
switch(c)
{
case '8':
case '9':
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
{
count++;
if((count%2)!=0)
{
if(j<num-1)
{
String str=hex[j]+hex[j+1];//两个字节16位,呵呵
result=result+d.DecodeGB2312(str);
}
}
} break;//为什么是高8位是从8开始呢?因为0x80~0xFF是中文字符表示范围
default:result=result+d.DecodeAscII(hex[j]);break;
}
}
}
if(method=="utf-8")
{
for(int j=0;j<num;j++)
{
char a=hex[j].charAt(0);
char b=hex[j].charAt(1);
switch(a)
{
case'0':h="0000";break;
case'1':h="0001";break;
case'2':h="0010";break;
case'3':h="0011";break;
case'4':h="0100";break;
case'5':h="0101";break;
case'6':h="0110";break;
case'7':h="0111";break;
case'8':h="1000";break;
case'9':h="1001";break;
case'A':h="1010";break;
case'B':h="1011";break;
case'C':h="1100";break;
case'D':h="1101";break;
case'E':h="1110";break;
case'F':h="1111";break;
}
if(h.startsWith("1110"))
{
String str=hex[j]+hex[j+1]+hex[j+2];
result=result+d.DecodeUTF(str);
j+=2;
}
else
result=result+d.DecodeAscII(hex[j]);
}
}
return result;
}
public static void main(String args[])//static 必须在void 之前
{
String input="0A485454502F312E3120343034204E6F7420466F756E640D0A436F6E74656E742D4C656E6774683A20313330380D0A436F6E74656E742D547970653A20746578742F68746D6C0D0A5365727665723A204D6963726F736F66742D4949532F362E300D0A446174653A205361742C203033204A756E20323030362031313A33333A313520474D540D0A0D0A3C21444F43545950452048544D4C205055424C494320222D2F2F5733432F2F4454442048544D4C20342E30312F2F454E222022687474703A2F2F7777772E77332E6F72672F54522F68746D6C342F7374726963742E647464223E0D0A3C48544D4C3E3C484541443E3C5449544C453ECEDEB7A8D5D2B5BDB8C3D2B33C2F5449544C453E0D0A3C4D45544120485454502D45515549563D22436F6E74656E742D547970652220436F6E74656E743D22746578742F68746D6C3B20636861727365743D474232333132223E0D0A3C5354594C4520747970653D22746578742F637373223E0D0A2020424F4459207B20666F6E743A203970742F3132707420CBCECCE5207D0D0A20204831207B20666F6E743A20313270742F3135707420CBCECCE5207D0D0A20204832207B20666F6E743A203970742F3132707420CBCECCE5207D0D0A2020413A6C696E6B207B20636F6C6F723A20726564207D0D0A2020413A76697369746564207B20636F6C6F723A206D61726F6F6E207D0D0A3C2F5354594C453E0D0A3C2F484541443E3C424F44593E3C5441424C452077696474683D35303020626F726465723D302063656C6C73706163696E673D31303E3C54523E3C54443E0D0A0D0A3C68313ECEDEB7A8D5D2B5BDB8C3D2B33C2F68313E0D0AC4FAD5FDD4DACBD1CBF7B5C4D2B3C3E6BFC9C4DCD2D1BEADC9BEB3FDA1A2B8FCC3FBBBF2D4DDCAB1B2BBBFC9D3C3A1A30D0A3C68723E0D0A3C703EC7EBB3A2CAD4D2D4CFC2B2D9D7F7A3BA3C2F703E0D0A3C756C3E0D0A3C6C693EC8B7B1A3E4AFC0C0C6F7B5C4B5D8D6B7C0B8D6D0CFD4CABEB5C4CDF8D5BEB5D8D6B7B5C4C6B4D0B4BACDB8F1CABDD5FDC8B7CEDECEF3A1A33C2F6C693E0D0A3C6C693EC8E7B9FBCDA8B9FDB5A5BBF7C1B4BDD3B6F8B5BDB4EFC1CBB8C3CDF8D2B3A3ACC7EBD3EBCDF8D5BEB9DCC0EDD4B1C1AACFB5A3ACCDA8D6AACBFBC3C7B8C3C1B4BDD3B5C4B8F1CABDB2BBD5FDC8B7A1A30D0A3C2F6C693E0D0A3C6C693EB5A5BBF73C6120687265663D226A6176617363726970743A686973746F72792E6261636B283129223EBAF3CDCB3C2F613EB0B4C5A5B3A2CAD4C1EDD2BBB8F6C1B4BDD3A1A33C2F6C693E0D0A3C2F756C3E0D0A3C68323E4854545020B4EDCEF320343034202D20CEC4BCFEBBF2C4BFC2BCCEB4D5D2B5BDA1A33C62723E496E7465726E657420D0C5CFA2B7FECEF12028494953293C2F68323E0D0A3C68723E0D0A3C703EBCBCCAF5D0C5CFA2A3A8CEAABCBCCAF5D6A7B3D6C8CBD4B1CCE1B9A9A3A93C2F703E0D0A3C756C3E0D0A3C6C693ED7AAB5BD203C6120687265663D22687474703A2F2F676F2E6D6963726F736F66742E636F6D2F66776C696E6B2F3F6C696E6B69643D38313830223E4D6963726F736F667420B2FAC6B7D6A7B3D6B7FECEF13C2F613EB2A2CBD1CBF7B0FCC0A8266C6471756F3B4854545026726471756F3BBACD266C6471756F3B34303426726471756F3BB5C4B1EACCE2A1A33C2F6C693E0D0A3C6C693EB4F2BFAA266C6471756F3B49495320B0EFD6FA26726471756F3BA3A8BFC9D4DA2049495320B9DCC0EDC6F72028696E65746D67722920D6D0B7C3CECAA3A9A3ACC8BBBAF3CBD1CBF7B1EACCE2CEAA266C6471756F3BCDF8D5BEC9E8D6C326726471756F3BA1A2266C6471756F3BB3A3B9E6B9DCC0EDC8CECEF126726471756F3BBACD266C6471756F3BB9D8D3DAD7D4B6A8D2E5B4EDCEF3CFFBCFA226726471756F3BB5C4D6F7CCE2A1A33C2F6C693E0D0A3C2F756C3E0D0A0D0A3C2F54443E3C2F54523E3C2F5441424C453E3C2F424F44593E3C2F48544D4C3E0D";
Decode d=new Decode();
String result=d.ToDecode(input); //ToDecode
File myFile=new File("result.txt");
try
{
byte[] b=result.getBytes();
FileOutputStream fout=new FileOutputStream(myFile);
fout.write(b);
fout.close();
}
catch(FileNotFoundException e)
{
System.err.println(e);
}
catch(IOException e)
{
System.err.println(e);
}
System.out.println("The Decode result is :\n"+result);
}
}
class StringToInt //被调用
{
public int HexStringToInt(String hex)
{
String a=String.valueOf(hex.charAt(0));
String b=String.valueOf(hex.charAt(1));
char c=hex.charAt(0);
char d=hex.charAt(1);
int h=0;
switch(c)
{
case 'A':h=10*16;break;
case 'B':h=11*16;break;
case 'C':h=12*16;break;
case 'D':h=13*16;break;
case 'E':h=14*16;break;
case 'F':h=15*16;break;
default:h=Integer.parseInt(a)*16;break;
}
switch(d)
{
case 'A':h=h+10;break;
case 'B':h=h+11;break;
case 'C':h=h+12;break;
case 'D':h=h+13;break;
case 'E':h=h+14;break;
case 'F':h=h+15;break;
default:h=h+Integer.parseInt(b);break;
}
return h;
}
}
class UnicodeStringToInt
{
public int UnicodeStringToInt(String hex)
{
String a=String.valueOf(hex.charAt(0));
String b=String.valueOf(hex.charAt(1));
char c=hex.charAt(0);
char d=hex.charAt(1);
int r=0;
switch(c)
{
case 'A':r=r+10*16;break;
case 'B':r=r+11*16;break;
case 'C':r=r+12*16;break;
case 'D':r=r+13*16;break;
case 'E':r=r+14*16;break;
case 'F':r=r+15*16;break;
default:r=r+Integer.parseInt(a)*16;break;
}
switch(d)
{
case 'A':r=r+10;break;
case 'B':r=r+11;break;
case 'C':r=r+12;break;
case 'D':r=r+13;break;
case 'E':r=r+14;break;
case 'F':r=r+15;break;
default:r=r+Integer.parseInt(b);break;
}
return r;
}
}
class EncodeMethod //第二步
{
public String method(String s)
{
Decode de=new Decode(); //调用编码
String result="";
int num=0;
int len=s.length();
String hex[]=new String[len/2];
for(int i=0;i<s.length();i+=2)
{ String temp="";
temp=temp+String.valueOf(s.charAt(i));
temp=temp+String.valueOf(s.charAt(i+1));
hex[num]=temp;
num++;
}
for(int j=0;j<num;j++)
{
result=result+de.DecodeAscII(hex[j]); //调用DecodeAscII
}
int i=result.indexOf("charset=gb2312");
if(i!=-1)
{
System.out.println("charset=gb2312");return "gb2312";
}
i=result.indexOf("charset=utf-8");
if(i!=-1)
{System.out.println("Content-Encoding: utf-8");return "utf-8";
}
i=result.indexOf("charset=big5");
if(i!=-1)
{System.out.println("Content-Encoding: big5");return "big5";
}
return "gb2312";
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -