`
samyou
  • 浏览: 107757 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java下的 UTF-8编码

    博客分类:
  • java
阅读更多
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问题

    在Java中,当我们从UTF-8编码的文本文件读取内容时,如果文件开头带有BOM,可能会导致程序错误解析字符串,因为BOM并不是实际的文本内容,而是编码的标记。例如,如果你使用Java的默认`BufferedReader`或者`Scanner`...

    Delphi和JAVA进行TCPIP通信(用UTF-8编码)例子

    最近的项目(Delphi开发),需要经常和java语言开发的系统进行数据交互(Socket通信方式),数据编码约定采用UTF-8编码。 令我无语的是:JAVA系统那边反映说,Delphi发的数据他们收到是乱码,而我这边(Delphi7,...

    Java避免UTF-8的csv文件打开中文出现乱码的方法

    如果需要兼容多个Excel版本,可以使用UTF-8编码格式,并在文件头部输出BOM,即0xEF 0xBB 0xBF这三个字节。 Java避免UTF-8的csv文件打开中文出现乱码的方法是使用UTF-16LE编码格式,并在文件头部输出BOM。同时,需要...

    java 编码 UTF-8、ISO-8859-1、GBK

    UTF-8、ISO-8859-1 和 GBK 是三种常见的字符编码格式,每种都有其特定的应用场景和优缺点。 首先,UTF-8 是一种广泛使用的多字节编码,能够表示几乎所有的Unicode字符,包括中文。在Java中,UTF-8 支持国际化,是...

    判断文本文件是否为UTF-8编码

    本资源主要关注如何判断一个文本文件是否采用UTF-8编码。 在Windows系统中,比如Windows 7旗舰版,我们经常使用Notepad.exe(记事本)来查看和编辑文本文件。在编程环境中,有时候我们需要编写代码来检查文件的编码...

    java jsp解决utf-8乱码.zip

    在Java JSP开发中,遇到UTF-8编码导致的乱码问题是一个常见的困扰。这个问题主要涉及到字符编码的统一和正确处理。UTF-8是一种广泛使用的Unicode字符编码方案,它可以支持几乎所有的字符集,包括中文、日文和韩文。...

    泰文UTF-8编码转成Unicode编码详细代码

    文件里有详细的代码,编码格式选择UTF-8编码,亲测在linux下可以直接运行。泰文在osd输出的流程一般是泰文先转换成Unicode编码,然后调用freetype进行文字渲染叠加

    JDK中文转utf-8编码

    JDK 中文转 utf-8 编码是 Java 开发中常见的问题,特别是在处理中文字符时。_utf-8 编码是一种通用的编码方式,可以表示所有 Unicode 字符。在 JDK 中提供了一个工具 native2ascii.exe,可以将中文字符转换为 utf-8 ...

    将字符串从常用编码转为utf-8编码(java)

    Java字符串编码查询及转换,可将常用的一些编码格式转换成utf-8

    解决Invalid byte 1 of 1-byte UTF-8 sequence

    byte UTF-8 sequence-中文版的window下java的默认的编码为GBK.url":这个文件名暗示了解决XML文件读取异常的方法,尤其是在Windows环境下,Java默认的文件编码可能是GBK,这可能导致读取包含UTF-8编码的XML文件时...

    java 中文字符串,utf-8编码为byte数组的计算过程

    例如,一个简单的中文字符在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.rar_UTF XML_UTF-8编码_utf_utf-8_xml utf-8"这个压缩包中,我们主要探讨的是与XML文档相关的编码问题,特别是UTF-8编码。 UTF-8是一种广泛使用的Unicode字符编码方案。它能够表示Unicode标准中的所有字符,...

    jmeter5.0官网utf-8编码

    在"jmeter5.0官网utf-8编码"这个主题中,我们关注的是JMeter 5.0版本,并且源码已经修改为UTF-8编码,以解决在使用过程中可能出现的字符乱码问题。 JMeter 5.0是Apache JMeter的一个重大更新,它引入了多项改进和新...

    快速转码(UTF-8转ASCII)

    如果要转换整个文件的编码,可以使用`java.io`或`java.nio.file`包中的类来读取UTF-8编码的文件,转换后写入ASCII编码的文件。 总结来说,"快速转码(UTF-8转ASCII)"是一个常见的编程需求,尤其在Java Web开发中。...

    Java 所有字符串转UTF-8 万能工具类-GetEncode.java

    不需要关心接受的字符串编码是UTF_8还是GBK,还是ios-8859-1,自动转换为utf-8编码格式,无需判断字符串原有编码,用法://处理编码String newStr = GetEncode.transcode(oldStr);

    utf-8码转换器(转换成utf-8码)

    UTF-8编码是一种广泛使用的字符编码标准,它能够表示Unicode字符集中的所有字符。这个“utf-8码转换器”程序是用SWT(Standard Widget Toolkit)开发的,旨在帮助用户将非UTF-8编码的文本转换为UTF-8编码。在IT行业...

    utf-8编码转换工具.zip

    该程序支持.c .h .cpp .hpp .bat .java等6种格式的文件编码转换,如果需要添加其他格式的文件,直接修改suffix的条件判断处的语句即可,压缩包中提供exe程序和python写的源码

    utf-8 ansi 字符互转 工具

    总结来说,理解和掌握UTF-8与ANSI字符编码的差异,以及如何进行转换,对于解决跨平台、多语言环境下的文本处理问题至关重要。在日常工作中,我们可以利用各种工具和编程手段,灵活应对不同编码格式带来的挑战。在...

    JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换

    - **Unicode到UTF-8**: 同样以"a 中文"为例,转换为UTF-8编码后,字节数组为`0x61 0xE4 0xB8 0xAD 0xE6 0x96 0x87`。 - **UTF-8到Unicode**: 反向转换后,结果依然是"a 中文"。 ##### 3. Unicode与ISO-8859-1 - **...

Global site tag (gtag.js) - Google Analytics