java执行cmd获取结果乱码解决方法

以下示例使用kotlin写的,java也是一样的方法

①如果使用reader的话,注意要在获取流的时候就设置编码为GBK,因为cmd默认是GBK编码,获取之后在转换是没用的

val command = "ping www.baidu.com"
val process = Runtime.getRuntime().exec(command)
val reader = BufferedReader(InputStreamReader(process.inputStream, charset("GBK")))
while (true){
    val x = reader.readLine()?:break
}

②直接操作InputStream:

a.用byte数组承接:(注意:这种方式如果byte数组不够大的话,可能会出现把一个汉字切两半导致乱码问题)

val inputStream = process.inputStream
val builder = java.lang.StringBuilder()
val bytes= ByteArray(32)
val byteArrayOutputStream = ByteArrayOutputStream()
while (true){
    val len = inputStream.read(bytes)
    if (len ==-1) break else builder.append(String(bytes, 0,len,charset("GBK")))
}
println(builder.toString())

b.用byteArrayoutputStream(推荐)

val inputStream = process.inputStream
val byteArrayOutputStream = ByteArrayOutputStream()
while (false){
    val i = inputStream.read()
    if (i ==-1) break  else byteArrayOutputStream.write(i)
}
val byteArray = byteArrayOutputStream.toByteArray()
println(String(byteArray, charset("GBK")))

c.kotlin有个inputStream.readBytes()可以一次全部读取

val readBytes = inputStream.readBytes()
println(String(readBytes, charset("GBK")))

你可能感兴趣的:(java,kotlin,java,开发语言,kotlin)