因为系统是中文语言的,得到的是GBK编码,所以肯定不是utf的。
工具:
win7
jdk
方法:
在计算机上右键选择属性
点击高级系统设置
点击环境变量
在系统变量中点新建,输入变量名为: JAVA_TOOL_OPTIONS, 变量值为:-Dfile.encoding=UTF-8,确定就可以了。
/** To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package cn.timecd.gyhhy.mscup
import java.io.UnsupportedEncodingException
import java.nio.charset.Charset
import java.util.Arrays
import java.util.logging.Level
import java.util.logging.Logger
/**
* 主要涉及到 String 类的 getBytes 方法
* @author 32798
*/
public class Test {
public static void main(String[] args){
// 预定义常量
String charset = "gbk"// 编码
// 请注意,找不到编码集的时候,下面这句代码 会抛出
// java.nio.charset.UnsupportedCharsetException
Charset charset$ = Charset.forName(charset) // 获取编码集
// 只是阅读: 两个 变量名字 比较, 请注意区分
// charset
// charset$
// 从 string 转 bytes
String str = "这是一个测试文本"
try {
// 方法一: 直接通过 编码集的名字 转码
// 需要 try-catch
// 当字符集找不到时会抛出 java.io.UnsupportedEncodingException
System.out.println(Arrays.toString(str.getBytes(charset)))
} catch (UnsupportedEncodingException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex)
}
// 方法二: 通过 编码集(java.nio.charset.Charset) 转码
// 不需要 try-catch
System.err.println(Arrays.toString(str.getBytes(charset$)))
try {
Thread.sleep(200) // 只是为了让 ide 能按顺序输出
} catch (InterruptedException ex) {}
// 从bytes 转 string
//byte[] bytes = {-78, -35, -60, -32, -62, -19}
byte[] bytes = str.getBytes(charset$)// 只是为了获取测试文本的 gbk 码
System.out.print("\n\n\n") // 隔出3行, 免得跟之前的输出混淆
try {
// 方法一: 通过 编码集名字 新建一个 string
// 需要 try-catch
// 当字符集找不到时会抛出 java.io.UnsupportedEncodingException
System.out.println(new String(bytes, charset))
} catch (UnsupportedEncodingException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex)
}
// 方法二: 直接通过 字符集 新建一个 string
System.err.println(new String(bytes, charset$))
}
}
我先解释一下我对你的问题的理解:
你的问题有点笼统
可以这么理解两个意思
:
一
,你是想吧一个gbk编码的字符串用utf-8格式来编码
String
s
=
new
String
("全国".getBytes("GBK"),"GBK")
虽然这个时候的s是GBK编码的
但是s还是中文字符的
所以
上面这位同胞用
new(s.getBytes("GBK"),"UTF-8")的方式肯定是错的
应该用
String
s1
=
new
String
(s.getBytes("UTF-8"),"UTF-8")
这样s1就是UTF-8编码的字符串了
二,如果是遇见乱码问题
比如
String
s
=
new
String
("全国".getBytes("GBK"),"GBK")
这样的s就是gbk编码的
现在你要把GBK格式的编码用UTF-8去编码
肯定就会出现乱码
String
s2
=
new
String(s.getBytes("GBK"),"UTF-8")
这个s2肯定是乱码的
而且这样就根本解不出来了
系统出现的乱码显示的时候才会出现编码错误
所以
一般出现乱码
只要把输入流换个编码解析一下就ok了
还有什么不明白
可以问我