实现字符串的编码转换,用以解决字符串乱码问题

引起乱码的情况很多~实质上 主要是字符串本身的编码格式 与程序所需要的编码格式不一致导致的。要解决乱码其实很简单,

分2步 :

  1:获取到字符串 本身的编码

  2:改变字符串编码 (本身编码 -> 新编码)

话不多说,直接贴代码

package cn.sccl.framework.util;

import org.apache.commons.lang3.StringUtils;

import java.io.UnsupportedEncodingException;
/**
 * 字符编码工具类
 *
 * @author _minus
 * @create 2017-11-06 18:38
 */
public class CharsetUtils {
    private enum Charset {
        /** 7位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁块 */
        US_ASCII("US-ASCII","位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁块 "),
        ISO_8859_1("ISO-8859-1","ISO 拉丁字母表 No.1,也叫作 ISO-LATIN-1"),
        UTF_8("UTF-8","8 位 UCS 转换格式"),
        UTF_16BE("UTF-16BE","16 位 UCS 转换格式,Big Endian(最低地址存放高位字节)字节顺序"),
        UTF_16LE("UTF_16LE","16 位 UCS 转换格式,Big Endian(最低地址存放高位字节)字节顺序"),
        UTF_16("UTF_16","16 位 UCS 转换格式,字节顺序由可选的字节顺序标记来标识"),
        GBK("GBK","中文超大字符集");
        private String encode;
        private String desc;

        public String getEncode() {
            return encode;
        }

        public void setEncode(String encode) {
            this.encode = encode;
        }

        public String getDesc() {
            return desc;
        }

        public void setDesc(String desc) {
            this.desc = desc;
        }

        private Charset(String encode, String desc){
            this.encode =encode;
            this.desc = desc ;

        }

    }

    /**
     * 获取传入字符串的编码格式
     * @param str
     * @return
     */
    public static String getEncode(String str) throws UnsupportedEncodingException {
        if (!StringUtils.isEmpty(str)){
            for (Charset charset : Charset.values()) {
                if (str.equals(new String(str.getBytes(charset.getEncode()),charset.getEncode()))){
                    return charset.getEncode();
                }
            }
        }
        throw new UnsupportedEncodingException("编码库中不存在");
    }

    /**
     * 字符串编码转换的实现方法
     * @param str  待转换编码的字符串
     * @param newCharset 目标编码
     * @return
     * @throws UnsupportedEncodingException
     */
    public static String changeCharset(String str, String newCharset)
            throws UnsupportedEncodingException {
        if (str != null) {
            //获取到原字符编码
            String charsetName = getEncode(str);
            //用默认字符编码解码字符串。
            byte[] bs = str.getBytes(charsetName);
            //用新的字符编码生成字符串
            return new String(bs, newCharset);
        }
        return null;
    }
    /**
     * 将字符编码转换成US-ASCII码
     */
    public static String toASCII(String str) throws UnsupportedEncodingException {
        return changeCharset(str, Charset.US_ASCII.getEncode());
    }
    /**
     * 将字符编码转换成ISO-8859-1码
     */
    public static String toISO_8859_1(String str) throws UnsupportedEncodingException {
        return changeCharset(str, Charset.ISO_8859_1.getEncode());
    }
    /**
     * 将字符编码转换成UTF-8码
     */
    public static String toUTF_8(String str) throws UnsupportedEncodingException {
        return changeCharset(str, Charset.UTF_8.getEncode());
    }
    /**
     * 将字符编码转换成UTF-16BE码
     */
    public static String toUTF_16BE(String str) throws UnsupportedEncodingException {
        return changeCharset(str, Charset.UTF_16BE.getEncode());
    }
    /**
     * 将字符编码转换成UTF-16LE码
     */
    public static String toUTF_16LE(String str) throws UnsupportedEncodingException {
        return changeCharset(str, Charset.UTF_16LE.getEncode());
    }
    /**
     * 将字符编码转换成UTF-16码
     */
    public static String toUTF_16(String str) throws UnsupportedEncodingException {
        return changeCharset(str,Charset.UTF_16.getEncode());
    }
    /**
     * 将字符编码转换成GBK码
     */
    public static String toGBK(String str) throws UnsupportedEncodingException {
        return changeCharset(str, Charset.GBK.getEncode());
    }

}
时间: 2024-11-11 22:56:50

实现字符串的编码转换,用以解决字符串乱码问题的相关文章

Unicode字符集下CString与char *转换 (解决中文乱码等)(转)

UniCode 下 CString 转 char* 的方法的文章有很多,但是大部分都是在互相转载,看了那么多资料,仍然没有解决乱码的问题,后来从一个论坛的一条回复里面找到了正确的方法,特此拿出来与大家分享. 先总结一下网上找到的三种转换的方法: 方法一:使用函数setlocale setlocale(LC_ALL,"chs"); 需要包含头文件#include<locale.h> 此方法的思路是配置地域化信息.通常在需要输入输出中文的时候设置一下,就没问题了,setloca

python 字符串 类型互相转换 str bytes 字符串连接

直接看例子: n = 888 print bytes(n)+str1 print str(n)+str1 print type(n) n = bytes(n) print type(n) n = str(n) print type(n) 查看结果 8881234567 8881234567 <type 'int'> <type 'str'> <type 'str'> 原文地址:http://blog.51cto.com/weiruoyu/2334578

Linux下修改MySQL数据库字符编码为UTF-8解决中文乱码

由于MySQL编码原因会导致数据库出现乱码. 解决办法: 修改MySQL数据库字符编码为UTF-8,UTF-8包含全世界所有国家需要用到的字符,是国际编码. 具体操作: 1.进入MySQL控制台 >mysql -uroot -p #输入密码进入 >status; #查看当前MySQL运行状态,如下图所示: 2.修改mysql配置文件 [[email protected] ~]# vi /etc/my.cnf #在[client]段增加下面代码 default-character-set=utf

JAVA字符串编码转换常用类

无论是对程序的本地化还是国际化,都会涉及到字符编码的转换的问题.尤其在web应用中常常需要处理中文字符,这时就需要进行字符串的编码转换,将字符串编码转换为GBK或者GB2312.一.关键技术点:    1.当前流行的字符编码格式有:US-ASCII.ISO-8859-1.UTF-8.UTF-16BE.UTF-16LE.UTF-16.GBK.GB2312等,其中GBK.GB2312是专门处理中文编码的.    2.String的getBytes方法用于按指定编码获取字符串的字节数组,参数指定了解码

ArrayBuffer与字符串的互相转换

ArrayBuffer与字符串的互相转换 ArrayBuffer转为字符串,或者字符串转为ArrayBuffer,有一个前提,即字符串的编码方法是确定的.假定字符串采用UTF-16编码(JavaScript的内部编码方式),可以自己编写转换函数. // ArrayBuffer转为字符串,参数为ArrayBuffer对象 function ab2str(buf) { return String.fromCharCode.apply(null, new Uint16Array(buf)); } //

C++中数字与字符串之间的转换,别人的,

C++中数字与字符串之间的转换 1.字符串数字之间的转换 (1)string --> char *   string str("OK");   char * p = str.c_str(); (2)char * -->string   char *p = "OK";   string str(p); (3)char * -->CString    char *p ="OK";   CString m_Str(p);   //或者

java字符编码转换

在开发的过程中,字符编码常常令我们头痛.经常会出现各种各样的乱码.下面就介绍java的编码转换和常见的乱码是使用什么样的编码去读取的: 先看一张图片: 在看看java中如何处理编码的转换: package com.test; /** * 字符串编码转换 * @author Herman.xiong * @date 2015年7月16日09:36:59 * @version V3.0 * @since Tomcat6.0,Jdk1.6 * @copyright Copyright (c) 2015

解决出现乱码substr截取中文字符 siluke123

siluke123< ?php echo mb_substr('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8');?>输出:这样一来我的字< ?phpecho mb_strcut('这样一来我的字符串就不会有乱码^_^', 0, 7, 'utf-8');?>输出:这样 string mb_strcut ( string $str , int $start [, int $length [, string $encoding ] )mb_strcut() 和 m

分享万能java字符串编码转换工具类

代码下载地址:http://www.zuidaima.com/share/1795356301560832.htm 原文:分享万能java字符串编码转换工具类 package com.zuidaima.util; import java.io.UnsupportedEncodingException; /** * 转换字符串的编码 */ public class ChangeCharset { /** 7位ASCII字符,也叫作ISO646-US.Unicode字符集的基本拉丁块 */ publ