將字串的編碼格式轉換為utf-8
阿新 • • 發佈:2018-12-08
方式一:
-
/**
-
* 將字串的編碼格式轉換為utf-8
-
*
-
* @param
str
-
* @return Name = new
-
* String(Name.getBytes("ISO-8859-1"), "utf-8");
-
*/
-
public
static String toUTF8(String str) {
-
if (isEmpty(str)) {
-
return
"";
-
}
-
try {
-
if (str.equals(
new String(str.getBytes(
"GB2312"),
"GB2312"))) {
-
str =
new String(str.getBytes(
"GB2312"),
"utf-8");
-
return str;
-
}
-
}
catch (Exception exception) {
-
}
-
try {
-
if (str.equals(
new String(str.getBytes(
"ISO-8859-1"),
"ISO-8859-1"))) {
-
str =
new String(str.getBytes(
"ISO-8859-1"),
"utf-8");
-
return str;
-
}
-
}
catch (Exception exception1) {
-
}
-
try {
-
if (str.equals(
new String(str.getBytes(
"GBK"),
"GBK"))) {
-
str =
new String(str.getBytes(
"GBK"),
"utf-8");
-
return str;
-
}
-
}
catch (Exception exception3) {
-
}
-
return str;
-
}
-
-
/**
-
* 判斷是否為空
-
*
-
* @param str
-
* @return
-
*/
-
public static boolean isEmpty(String str) {
-
// 如果字串不為null,去除空格後值不與空字串相等的話,證明字串有實質性的內容
-
if (str !=
null && !str.trim().isEmpty()) {
-
return
false;
// 不為空
-
}
-
return
true;
// 為空
-
}
java獲取:
String name = TypeUtil.toUTF8(request.getParameter("name"));
</div>
亂碼的另一種解決辦法:
request.setCharacterEncoding("UTF-8"),這句話熟悉麼,這句話的意思是:用"utf-8"編碼對客戶端的請求進行重新解碼。
在步驟2之後(或步驟3中)執行,那麼接收到的引數也不會亂碼啦。
一個小例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
import
java.io.UnsupportedEncodingException;
public
class
ConvertEncodingFormat {
/**
* 將一段錯誤解碼的字串重新解碼
*/
public
static
String convertEncodingFormat(String str, String formatFrom, String FormatTo) {
String result =
null
;
if
(!(str ==
null
|| str.length() ==
0
)) {
try
{
result =
new
String(str.getBytes(formatFrom), FormatTo);
}
catch
(UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return
result;
}
/**
* test
*/
public
static
void
main(String[] args) {
// utf-8編碼
String str =
"你好,少年!"
;
// UTF-8編碼的byte流強行用iso-8859-1解碼,毫無疑問的亂碼了
String str1 = convertEncodingFormat(str,
"UTF-8"
,
"iso-8859-1"
);
System.out.println(str1);
// 將str1再轉化為byte流,重新用UTF-8解碼,亂碼問題解決
String str2 = convertEncodingFormat(str1,
"iso-8859-1"
,
"UTF-8"
);
System.out.println(str2);
}
}
|
java字串的各種編碼轉換
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
import
java.io.UnsupportedEncodingException;
/**
* 轉換字串的編碼
*/
public
class
ChangeCharset {
/** 7位ASCII字元,也叫作ISO646-US、Unicode字符集的基本拉丁塊 */
public
static
final
String US_ASCII =
"US-ASCII"
;
/** ISO 拉丁字母表 No.1,也叫作 ISO-LATIN-1 */
public
static
final
String ISO_8859_1 =
"ISO-8859-1"
;
/** 8 位 UCS 轉換格式 */
public
static
final
String UTF_8 =
"UTF-8"
;
/** 16 位 UCS 轉換格式,Big Endian(最低地址存放高位位元組)位元組順序 */
public
static
final
String UTF_16BE =
"UTF-16BE"
;
/** 16 位 UCS 轉換格式,Little-endian(最高地址存放低位位元組)位元組順序 */
public
static
final
String UTF_16LE =
"UTF-16LE"
;
/** 16 位 UCS 轉換格式,位元組順序由可選的位元組順序標記來標識 */
public
static
final
String UTF_16 =
"UTF-16"
;
/** 中文超大字符集 */
public
static
final
String GBK =
"GBK"
;
/**
* 將字元編碼轉換成US-ASCII碼
*/
public
String toASCII(String str)
throws
UnsupportedEncodingException{
return
this
.changeCharset(str, US_ASCII);
}
/**
* 將字元編碼轉換成ISO-8859-1碼
*/
public
String toISO_8859_1(String str)
throws
UnsupportedEncodingException{
return
this
.changeCharset(str, ISO_8859_1);
}
/**
* 將字元編碼轉換成UTF-8碼
*/
public
String toUTF_8(String str)
throws
UnsupportedEncodingException{
return
this
.changeCharset(str, UTF_8);
}
/**
* 將字元編碼轉換成UTF-16BE碼
*/
public
String toUTF_16BE(String str)
throws
UnsupportedEncodingException{
return
this
.changeCharset(str, UTF_16BE);
}
/**
* 將字元編碼轉換成UTF-16LE碼
*/
public
String toUTF_16LE(String str)
throws
UnsupportedEncodingException{
return
this
.changeCharset(str, UTF_16LE);
}
/**
* 將字元編碼轉換成UTF-16碼
*/
public
String toUTF_16(String str)
throws
UnsupportedEncodingException{
return
this
.changeCharset(str, UTF_16);
}
/**
* 將字元編碼轉換成GBK碼
*/
public
String toGBK(String str)
throws
UnsupportedEncodingException{
return
this
.changeCharset(str, GBK);
}
/**
* 字串編碼轉換的實現方法
* @param str 待轉換編碼的字串
* @param newCharset 目標編碼
* @return
* @throws UnsupportedEncodingException
*/
public
String changeCharset(String str, String newCharset)
throws
UnsupportedEncodingException {
if
(str !=
null
) {
//用預設字元編碼解碼字串。
byte
[] bs = str.getBytes();
//用新的字元編碼生成字串
return
new
String(bs, newCharset);
}
return
null
;
}
/**
* 字串編碼轉換的實現方法
* @param str 待轉換編碼的字串
* @param oldCharset 原編碼
* @param newCharset 目標編碼
* @return
* @throws UnsupportedEncodingException
*/
public
String changeCharset(String str, String oldCharset, String newCharset)
throws
UnsupportedEncodingException {
if
(str !=
null
) {
//用舊的字元編碼解碼字串。解碼可能會出現異常。
byte
[] bs = str.getBytes(oldCharset);
//用新的字元編碼生成字串
return
new
String(bs, newCharset);
}
return
null
;
}
<
|