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;
}
}
分享到:
相关推荐
在Java中,当我们从UTF-8编码的文本文件读取内容时,如果文件开头带有BOM,可能会导致程序错误解析字符串,因为BOM并不是实际的文本内容,而是编码的标记。例如,如果你使用Java的默认`BufferedReader`或者`Scanner`...
最近的项目(Delphi开发),需要经常和java语言开发的系统进行数据交互(Socket通信方式),数据编码约定采用UTF-8编码。 令我无语的是:JAVA系统那边反映说,Delphi发的数据他们收到是乱码,而我这边(Delphi7,...
如果需要兼容多个Excel版本,可以使用UTF-8编码格式,并在文件头部输出BOM,即0xEF 0xBB 0xBF这三个字节。 Java避免UTF-8的csv文件打开中文出现乱码的方法是使用UTF-16LE编码格式,并在文件头部输出BOM。同时,需要...
UTF-8、ISO-8859-1 和 GBK 是三种常见的字符编码格式,每种都有其特定的应用场景和优缺点。 首先,UTF-8 是一种广泛使用的多字节编码,能够表示几乎所有的Unicode字符,包括中文。在Java中,UTF-8 支持国际化,是...
本资源主要关注如何判断一个文本文件是否采用UTF-8编码。 在Windows系统中,比如Windows 7旗舰版,我们经常使用Notepad.exe(记事本)来查看和编辑文本文件。在编程环境中,有时候我们需要编写代码来检查文件的编码...
文件里有详细的代码,编码格式选择UTF-8编码,亲测在linux下可以直接运行。泰文在osd输出的流程一般是泰文先转换成Unicode编码,然后调用freetype进行文字渲染叠加
在Java JSP开发中,遇到UTF-8编码导致的乱码问题是一个常见的困扰。这个问题主要涉及到字符编码的统一和正确处理。UTF-8是一种广泛使用的Unicode字符编码方案,它可以支持几乎所有的字符集,包括中文、日文和韩文。...
在大多数情况下,BOM在UTF-8编码中并不必要,因为它默认是小端序,但对于某些程序或系统,BOM可能有助于识别文件的编码方式。 在处理带BOM的UTF-8文件时,IDEA提供了很好的兼容性。通常,BOM可能会导致一些编辑器或...
BOM是Unicode编码的一个可选特征,它在文件的开头插入三个特殊的字节(EF BB BF),用来标识该文件是用UTF-8编码的。大部分现代文本编辑器可以正确处理BOM,但在某些情况下,如直接读取文件内容或进行特定的解析操作...
JDK 中文转 utf-8 编码是 Java 开发中常见的问题,特别是在处理中文字符时。_utf-8 编码是一种通用的编码方式,可以表示所有 Unicode 字符。在 JDK 中提供了一个工具 native2ascii.exe,可以将中文字符转换为 utf-8 ...
Java字符串编码查询及转换,可将常用的一些编码格式转换成utf-8
byte UTF-8 sequence-中文版的window下java的默认的编码为GBK.url":这个文件名暗示了解决XML文件读取异常的方法,尤其是在Windows环境下,Java默认的文件编码可能是GBK,这可能导致读取包含UTF-8编码的XML文件时...
例如,一个简单的中文字符在UTF-8编码下可能占用3个字节。这是因为UTF-8编码规则决定了不同码点范围的字符需要不同数量的字节来表示: - 对于码点U+0000到U+007F,UTF-8使用1个字节(7位)表示。 - 对于码点U+0080...
在"xml.rar_UTF XML_UTF-8编码_utf_utf-8_xml utf-8"这个压缩包中,我们主要探讨的是与XML文档相关的编码问题,特别是UTF-8编码。 UTF-8是一种广泛使用的Unicode字符编码方案。它能够表示Unicode标准中的所有字符,...
在"jmeter5.0官网utf-8编码"这个主题中,我们关注的是JMeter 5.0版本,并且源码已经修改为UTF-8编码,以解决在使用过程中可能出现的字符乱码问题。 JMeter 5.0是Apache JMeter的一个重大更新,它引入了多项改进和新...
如果要转换整个文件的编码,可以使用`java.io`或`java.nio.file`包中的类来读取UTF-8编码的文件,转换后写入ASCII编码的文件。 总结来说,"快速转码(UTF-8转ASCII)"是一个常见的编程需求,尤其在Java Web开发中。...
不需要关心接受的字符串编码是UTF_8还是GBK,还是ios-8859-1,自动转换为utf-8编码格式,无需判断字符串原有编码,用法://处理编码String newStr = GetEncode.transcode(oldStr);
UTF-8编码是一种广泛使用的字符编码标准,它能够表示Unicode字符集中的所有字符。这个“utf-8码转换器”程序是用SWT(Standard Widget Toolkit)开发的,旨在帮助用户将非UTF-8编码的文本转换为UTF-8编码。在IT行业...
该程序支持.c .h .cpp .hpp .bat .java等6种格式的文件编码转换,如果需要添加其他格式的文件,直接修改suffix的条件判断处的语句即可,压缩包中提供exe程序和python写的源码