以下示例使用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")))

本文介绍如何使用Kotlin执行CMD命令并正确处理GBK编码的输出。文章提供了两种方法:一是通过BufferedReader结合指定的字符集读取输出;二是直接操作InputStream,包括使用byte数组和ByteArrayOutputStream来读取数据。
3355

被折叠的 条评论
为什么被折叠?



