1. 程式人生 > >實現字符串的編碼轉換,用以解決字符串亂碼問題

實現字符串的編碼轉換,用以解決字符串亂碼問題

cnblogs min als 獲取 轉換 編碼工具 auth color enum

引起亂碼的情況很多~實質上 主要是字符串本身的編碼格式 與程序所需要的編碼格式不一致導致的。要解決亂碼其實很簡單,

分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()); } }

實現字符串的編碼轉換,用以解決字符串亂碼問題