方式一:
-
/**
-
* 将字符串的编码格式转换为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
;
}
public
static
void
main(String[] args)
throws
UnsupportedEncodingException {
ChangeCharset test =
new
ChangeCharset();
String str =
"This is a 中文的 String!"
;
System.out.println(
"str: "
+ str);
String gbk = test.toGBK(str);
System.out.println(
"转换成GBK码: "
+ gbk);
System.out.println();
String ascii = test.toASCII(str);
System.out.println(
"转换成US-ASCII码: "
+ ascii);
gbk = test.changeCharset(ascii,ChangeCharset.US_ASCII, ChangeCharset.GBK);
System.out.println(
"再把ASCII码的字符串转换成GBK码: "
+ gbk);
System.out.println();
String iso88591 = test.toISO_8859_1(str);
System.out.println(
"转换成ISO-8859-1码: "
+ iso88591);
gbk = test.changeCharset(iso88591,ChangeCharset.ISO_8859_1, ChangeCharset.GBK);
System.out.println(
"再把ISO-8859-1码的字符串转换成GBK码: "
+ gbk);
System.out.println();
String utf8 = test.toUTF_8(str);
System.out.println(
"转换成UTF-8码: "
+ utf8);
gbk = test.changeCharset(utf8,ChangeCharset.UTF_8, ChangeCharset.GBK);
System.out.println(
"再把UTF-8码的字符串转换成GBK码: "
+ gbk);
System.out.println();
String utf16be = test.toUTF_16BE(str);
System.out.println(
"转换成UTF-16BE码:"
+ utf16be);
gbk = test.changeCharset(utf16be,ChangeCharset.UTF_16BE, ChangeCharset.GBK);
System.out.println(
"再把UTF-16BE码的字符串转换成GBK码: "
+ gbk);
System.out.println();
String utf16le = test.toUTF_16LE(str);
System.out.println(
"转换成UTF-16LE码:"
+ utf16le);
gbk = test.changeCharset(utf16le,ChangeCharset.UTF_16LE, ChangeCharset.GBK);
System.out.println(
"再把UTF-16LE码的字符串转换成GBK码: "
+ gbk);
System.out.println();
String utf16 = test.toUTF_16(str);
System.out.println(
"转换成UTF-16码:"
+ utf16);
gbk = test.changeCharset(utf16,ChangeCharset.UTF_16LE, ChangeCharset.GBK);
System.out.println(
"再把UTF-16码的字符串转换成GBK码: "
+ gbk);
String s =
new
String(
"中文"
.getBytes(
"UTF-8"
),
"UTF-8"
);
System.out.println(s);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
<div class="art_xg">
-
/**
-
* 将字符串的编码格式转换为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
;
}
public
static
void
main(String[] args)
throws
UnsupportedEncodingException {
ChangeCharset test =
new
ChangeCharset();
String str =
"This is a 中文的 String!"
;
System.out.println(
"str: "
+ str);
String gbk = test.toGBK(str);
System.out.println(
"转换成GBK码: "
+ gbk);
System.out.println();
String ascii = test.toASCII(str);
System.out.println(
"转换成US-ASCII码: "
+ ascii);
gbk = test.changeCharset(ascii,ChangeCharset.US_ASCII, ChangeCharset.GBK);
System.out.println(
"再把ASCII码的字符串转换成GBK码: "
+ gbk);
System.out.println();
String iso88591 = test.toISO_8859_1(str);
System.out.println(
"转换成ISO-8859-1码: "
+ iso88591);
gbk = test.changeCharset(iso88591,ChangeCharset.ISO_8859_1, ChangeCharset.GBK);
System.out.println(
"再把ISO-8859-1码的字符串转换成GBK码: "
+ gbk);
System.out.println();
String utf8 = test.toUTF_8(str);
System.out.println(
"转换成UTF-8码: "
+ utf8);
gbk = test.changeCharset(utf8,ChangeCharset.UTF_8, ChangeCharset.GBK);
System.out.println(
"再把UTF-8码的字符串转换成GBK码: "
+ gbk);
System.out.println();
String utf16be = test.toUTF_16BE(str);
System.out.println(
"转换成UTF-16BE码:"
+ utf16be);
gbk = test.changeCharset(utf16be,ChangeCharset.UTF_16BE, ChangeCharset.GBK);
System.out.println(
"再把UTF-16BE码的字符串转换成GBK码: "
+ gbk);
System.out.println();
String utf16le = test.toUTF_16LE(str);
System.out.println(
"转换成UTF-16LE码:"
+ utf16le);
gbk = test.changeCharset(utf16le,ChangeCharset.UTF_16LE, ChangeCharset.GBK);
System.out.println(
"再把UTF-16LE码的字符串转换成GBK码: "
+ gbk);
System.out.println();
String utf16 = test.toUTF_16(str);
System.out.println(
"转换成UTF-16码:"
+ utf16);
gbk = test.changeCharset(utf16,ChangeCharset.UTF_16LE, ChangeCharset.GBK);
System.out.println(
"再把UTF-16码的字符串转换成GBK码: "
+ gbk);
String s =
new
String(
"中文"
.getBytes(
"UTF-8"
),
"UTF-8"
);
System.out.println(s);
}
}
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
<div class="art_xg">