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")))

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值