public class UTFEncode
{
public static String encodeUTF8(String value) {
try {
int strlen = value.length();
StringBuffer out = new StringBuffer();
for (int i = 0; i < strlen; i++) {
char t = value.charAt(i);
int c = 0;
c |= (t & 0xffff);
if (c >= 0 && c < 0x80) {
switch (t) {
case '=':
out.append("%3d");
break;
case ' ':
out.append("%20");
break;
case '+':
out.append("%2b");
break;
case '\'':
out.append("%27");
break;
case '/':
out.append("%2F");
break;
case '.':
out.append("%2E");
break;
case '<':
out.append("%3c");
break;
case '>':
out.append("%3e");
break;
case '#':
out.append("%23");
break;
case '%':
out.append("%25");
break;
case '&':
out.append("%26");
break;
case '{':
out.append("%7b");
break;
case '}':
out.append("%7d");
break;
case '\\':
out.append("%5c");
break;
case '^':
out.append("%5e");
break;
case '~':
out.append("%73");
break;
case '[':
out.append("%5b");
break;
case ']':
out.append("%5d");
break;
default:
out.append(t);
break;
}
}
else if (c > 0x7f && c < 0x800) {
out.append("%");
out.append(byteArrayToHexString(new byte[] { (byte) (((c >>> 6) & 0x1f) | 0xc0) }));
out.append("%");
out.append(byteArrayToHexString(new byte[] { (byte) (((c >>> 0) & 0x3f) | 0x80) }));
} else if (c > 0x7ff && c < 0x10000) {
out.append("%");
out.append(byteArrayToHexString(new byte[] { (byte) (((c >>> 12) & 0x0f) | 0xe0) }));
out.append("%");
out.append(byteArrayToHexString(new byte[] { (byte) (((c >>> 6) & 0x3f) | 0x80) }));
out.append("%");
out.append(byteArrayToHexString(new byte[] { (byte) (((c >>> 0) & 0x3f) | 0x80) }));
} else if (c > 0x00ffff && c < 0xfffff) {
out.append("%");
out.append(byteArrayToHexString(new byte[] { (byte) (((c >>> 18) & 0x07) | 0xf0) }));
out.append("%");
out.append(byteArrayToHexString(new byte[] { (byte) (((c >>> 12) & 0x3f) | 0x80) }));
out.append("%");
out.append(byteArrayToHexString(new byte[] { (byte) (((c >>> 6) & 0x3f) | 0x80) }));
out.append("%");
out.append(byteArrayToHexString(new byte[] { (byte) (((c >>> 0) & 0x3f) | 0x80) }));
}
}
return out.toString();
} catch (Exception ex) {
ex.printStackTrace();
}
return "";
}
/**
*
* Convert a byte[] array to readable string format. This makes the "hex"
* readable!
*
* @return result String buffer in String format
*
* @param in
* byte[] buffer to convert to string format
*/
static String byteArrayToHexString(byte in[]) {
byte ch = 0x00;
int i = 0;
if (in == null || in.length <= 0)
return null;
String pseudo[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
"A", "B", "C", "D", "E", "F" };
StringBuffer out = new StringBuffer(in.length * 2);
while (i < in.length) {
ch = (byte) (in[i] & 0xF0); // Strip off high nibble
ch = (byte) (ch >>> 4);
// shift the bits down
ch = (byte) (ch & 0x0F);
// must do this is high order bit is on!
out.append(pseudo[(int) ch]); // convert the nibble to a String
// Character
ch = (byte) (in[i] & 0x0F); // Strip off low nibble
out.append(pseudo[(int) ch]); // convert the nibble to a String
// Character
i++;
}
String rslt = new String(out);
return rslt;
}
}
分享到:
相关推荐
最近的项目(Delphi开发),需要经常和java语言开发的系统进行数据交互(Socket通信方式),数据编码约定采用UTF-8编码。 令我无语的是:JAVA系统那边反映说,Delphi发的数据他们收到是乱码,而我这边(Delphi7,...
Java解决UTF-8的BOM问题
主要介绍了Java避免UTF-8的csv文件打开中文出现乱码的方法,结合实例形式分析了java操作csv文件时使用utf-16le编码与utf8编码相关操作技巧,需要的朋友可以参考下
文件里有详细的代码,编码格式选择UTF-8编码,亲测在linux下可以直接运行。泰文在osd输出的流程一般是泰文先转换成Unicode编码,然后调用freetype进行文字渲染叠加
Java字符串编码查询及转换,可将常用的一些编码格式转换成utf-8
不需要关心接受的字符串编码是UTF_8还是GBK,还是ios-8859-1,自动转换为utf-8编码格式,无需判断字符串原有编码,用法://处理编码String newStr = GetEncode.transcode(oldStr);
Recognize类判定指定文本文件为UTF-8还是GBK编码格式。
Java工程编码格式由GBK转化成utf-8(编码格式互转) https://ymjin.blog.csdn.net/article/details/118769530
JAVA UTF-8编码中文转拼音附件上传
老项目采用GBK编码格式,而新项目采用的UTF-8编码格式,如果直接把Java源代码复制到Eclipse中所有的中文信息会出现乱码。所以写了个小的方法类,将java文件的编码格式从GBK转UTF-8
能够集成到Source Insight中,解决JAVA文件乱码问题
在eclispe的项目中,有存在项目字符集和工作空间字符集不匹配,该jar只能将项目文件中的.java结尾的文件转为utf8编码,并且源文件必须为gbk编码的,否则乱码
asp版hmac_sha256加密方式,支持中英文,加密结果与java、php、python、js 一毛一样(utf-8编码全世界都是用它)
Java视频教程 UTF-8编码的中文问题 UTF8
java-utf8编码统一filter,使用过滤器统一更改字符集为utf8
本工程用于研究如何使用Java代码将GBK编码格式的工程转换为UTF-8编码格式的工程 本工程编码方式:UTF-8 本工程开发工具:MyEclipse
JDK中文转utf-8编码c:\Java\jdk1.6.0_05\bin中有个native2ascii.exe文件就是了
想到如下特征来识别汉字: 1. 如果第1位是0就不需要判断的,一定是ASCII字符。... 如果第1位是1开头的,第2位是0开头的,一定是GB编码。 3. 如果第1位是非1110开头的,则一定是GB编码。 4. 多做几个汉字判断。
把含有本地编码的文件转成utf-8的,经常用于java文件的转码. 把编码gbk的java文件批量转成utf-8编码的文件.