已知汉字如何求内码?已知内码如何求汉字?
解决方案 »
- 求助啊求助啊!!!~~~~为什么有的图片可以显示有的不能~~~~!!!!
- 怎样生成一个随机数? JAVA里生成随机数的范围是多少?
- Eclipse 3.0中输入中文为什么都变成方块了?要如何才能看到中文?!
- JAVA的socket通讯有没有限制通信字节数啊?
- swt 图片显示问题
- 用installshield如何打包java程序
- 求助:JAVA SQL程序设计
- 有用java编过树型结构吗(象资源管理那种)
- 有谁知道tomcat中Context.INITIAL_CONTEXT_FACTORY应该设置为什么?
- Dom / SAX / Dom4j 读取的文件节点中有 特别的字符,怎么处理??
- 问java的反射。如何判断类里面是否定义了我指定的字段。
- 关于张孝祥老师的一道习题
比如说 “安 ”它的内码转化成十六进的为B0B2,如何写个函数,输入字符串“安”就能返回这个十六进制
同理 已知十六进制B0B2如何写个函数,输入它之后就能显示“安”
System.out.println(ChineseUtil.toGBKHex('安'));
System.out.println(ChineseUtil.hex2GBK("b0b2"));
}
}import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;public class ChineseUtil { private final static char[] HEX = "0123456789abcdef".toCharArray();
private final static Charset GBK_CHARSET = Charset.forName("GBK"); public static String toGBKHex(char c) {
CharsetEncoder enc = GBK_CHARSET.newEncoder();
CharBuffer cb = CharBuffer.allocate(1);
cb.append(c);
cb.flip();
try {
return toHex(enc.encode(cb).array());
} catch (CharacterCodingException e) {
e.printStackTrace();
return null;
}
} public static String toHex(byte[] bys) {
if(bys == null) {
return null;
}
if(bys.length == 0) {
return "";
}
char[] chs = new char[bys.length * 2];
for(int i = 0, k = 0; i < bys.length; i++) {
chs[k++] = HEX[(bys[i] >>> 4) & 0xf];
chs[k++] = HEX[bys[i] & 0xf];
}
return new String(chs);
} public static String hex2GBK(String hex) {
byte[] bys = hex2Bytes(hex);
ByteBuffer bb = ByteBuffer.wrap(bys);
return GBK_CHARSET.decode(bb).toString();
} public static byte[] hex2Bytes(String hex) {
if(hex == null) {
return null;
}
if(hex.length() == 0) {
return new byte[0];
}
if(hex.length() % 2 != 0) {
throw new IllegalArgumentException("hex string is incorrect");
}
char[] chs = hex.toCharArray();
byte[] bys = new byte[chs.length / 2];
for(int i = 0, k = 0; i < bys.length; i++) {
bys[i] = (byte)((hex2Byte(chs[k++]) << 4) | hex2Byte(chs[k++]));
}
return bys;
} public static int hex2Byte(char ch) {
if(ch >= '0' && ch <= '9') {
return ch - '0';
}
if(ch >= 'a' && ch <= 'f') {
return ch - 'a' + 10;
}
if(ch >= 'A' && ch <= 'F') {
return ch - 'A' + 10;
}
throw new IllegalArgumentException(ch + " is not hex character");
}
}
java.net.URLEncoder.encode("安", "GBK").replace("%", "")