InputStream中如何解决中文乱码问题?

写了个简单的socket通讯的小程序,但是传入中文的时候输出一直是乱码,在网上看了资料得知是因为一次读一个byte,但是中文是两个byte导致每次读一半出错的。
求各大神指点。下面放上代码:
TCPSERVER服务端:

 class TCPServer{
    public static void main(String[] args)throws IOException{
        ServerSocket listen = new ServerSocket(5050);

        Socket server  = listen.accept();
        InputStream in = server.getInputStream();
        OutputStream out = server.getOutputStream();

        StringBuffer sb=new StringBuffer();
        int c;

        for(int i=0;i<20;i++)
        {
            sb.append((char)(c=in.read()));         
        }
        System.out.println("sb="+sb);
        MessageRule message=new MessageRule();
        message.unpack(sb);     

        if(message.getPrcsd().equals("2101"))
        {
            String s=new String(message.getBody(),"iso8859_1");
            System.out.println("s:"+s);
        }

        System.out.println("server收到:" + sb);
        out.write(message.getBody());   
        out.close();
        in.close();
        server.close();
        listen.close();
    }
}

TCPCLIENT客户端

 class TCPClient{
    public static void main(String[] args)throws IOException{
        Socket client = new Socket("127.0.0.1" , 5050);

        InputStream in = client.getInputStream();
        OutputStream out = client.getOutputStream();
        Filewriter file = new Filewriter();

        MessageRule message=new MessageRule();
        byte[] sendBye=message.pack("I'm 客户端!","2101");
        StringBuffer sbclient=new StringBuffer();
        out.write(sendBye);

        char  c ;
        for(int i=0;i<8;i++)
        {
            sbclient.append((char)(c=(char) in.read()));            
        }
        System.out.println("client收到:" + sbclient);

        out.close();
        in.close();
        client.close();
    }
}

下面是中间涉及的pack方法:

    public byte[] pack(String body,String prcsd)
    {
        length=prcsd.length()+body.length();
        String str = String.format("%08d", length);  
        String sTotal=str+prcsd+body;

        System.out.println("sTotal="+sTotal);
        try 
        {
            return sTotal.getBytes("iso8859_1");
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

结果如下,中文是乱码

图片说明

3个回答

你用了iso8859编码?直接把中文用utf8编码再发送,接受的时候再转换回utf8

在编程环境或者传递过程,最好使用统一的utf-8编码。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
json中中文乱码c#怎样解决

{"weatherinfo":{"city":"澶у叴","cityid":"101011100", "temp":"18","WD":"涓滃崡椋?,"WS":"2绾?,"SD":"18%","WSE":"2", "time":"17:05","isRadar":"1","Radar":"JC_RADAR_AZ9010_JB", "njd":"鏆傛棤瀹炲喌","qy":"1007","rain":"0"}} 这是从中国天气网获取的数据,怎样用c#解密中文乱码

tomcat7 中文文件乱码

一个 html 项目, 里面有中文命名的 html 文件,,,用tomcat7 跑起来,会有路径不能解析,应该是中文乱码, 后来我放到tomcat8 里就没有问题了, 但是我现在要解决tomcat7 的问题,,,,有谁知道呀

GBK格式的输入流转化成字符流中文乱码

StringBuffer contentBuf = new StringBuffer(); BufferedReader reader = null; try { reader = new BufferedReader(new InputStreamReader(in,“GBK”)); char[] buf = new char[1024]; int count = -1; while(true) { count = reader.read(buf); if(count==-1) { break; } contentBuf.append(buf,0,count); } } 这段代码获取接口传入的参数,解析报乱码,接口传入的编码格式是GBK的,如果换成UTF-8的就不乱吗了,但是GBK解析也是乱码

java读取pdf文件出现中文乱码

代码如下,读取pdf文件时,出现中文字符乱码的情况,求大神解决。。 ![图片说明](https://img-ask.csdn.net/upload/201512/01/1448957510_127034.png) package read; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import com.linuxense.javadbf.DBFField; import com.linuxense.javadbf.DBFReader; public class readDbf { public static void main(String[] args){ String filePath = "e:/20151201.DBF"; read(filePath); } public static void read(String filePath){ InputStream in = null; try { //读取pdf文件 in = new FileInputStream(filePath); //根据输入流,读取一个dbfreader实例,用来读取dbf文件信息 DBFReader reader = new DBFReader(in); //获取DBF文件中字段的个数 int couNum = reader.getFieldCount(); //输出字段的个数 System.out.println("字段个数为:"+couNum); //取出字段信息 for(int i =0;i<couNum;i++){ DBFField field = reader.getField(i); //解决字段信息乱码 String fieldName = new String(field.getName().getBytes("??"),"utf-8"); //输出字段信息 System.out.print(fieldName+" "); } System.out.println(); //取出pdf文件中的数据 Object[] rowValues; while((rowValues = reader.nextRecord())!=null){ for(int i =0;i<rowValues.length;i++){ System.out.print(rowValues[i]+" "); } System.out.println(); } } catch (Exception e) { e.printStackTrace(); }finally{ try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } }

用java的FileInputStream读取数据乱码

[size=large]我用FileInputStream来读取txt文件时显示的是正常的,但是用来读取例如docx文件时就会出现乱码,求解size]

[新手]关于struts2文件上传怎么解决文件名乱码问题

1、upload.jsp ``` <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>my file upload</title> </head> <body> <s:form action="uploadAction" method="post" enctype="multipart/form-data"> <s:file name="upload" label="文件上传"></s:file> <s:submit value="上传"></s:submit> </s:form> </body> </html> ``` 2、struts.xml ``` <struts> <!-- <constant name="struts.custom.i18n.resources" value="message"></constant> --> <package name="default" extends="struts-default"> <action name="uploadAction" class="com.action.UploadAction"> <result>/success.jsp</result> </action> </package> </struts> ``` 3、UploadAction.java ``` package com.action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.logging.Logger; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class UploadAction extends ActionSupport{ private File upload; //上传的文件 private String uploadName;//上传的文件名 public File getUpload() { return upload; } public void setUpload(File upload) { this.upload = upload; } public String getUploadName() { return uploadName; } public void setUploadName(String uploadName) { this.uploadName = uploadName; } public String execute() throws Exception{ InputStream is=new FileInputStream(getUpload());//获取文件的输入流 OutputStream os=new FileOutputStream("d:\\upload\\"+getUpload().getName());//指定输出流地址 byte buffer[] = new byte[1024]; int count=0; while((count=is.read(buffer))>0){ os.write(buffer,0,count); } os.close(); is.close(); return SUCCESS; } } ``` 4、上传的结果:文件名乱码 ![图片说明](https://img-ask.csdn.net/upload/201807/23/1532343596_693851.png) ![图片说明](https://img-ask.csdn.net/upload/201807/23/1532343623_389357.png)

网页源码下载下来后,汉字成乱码?

我用软件自动下载网页源码,作为监控网站用的,发现字数超过三万字,整个文本的汉字都成乱码,没办法分析,拿去转换编码也没办法矫正。以下是代码 con = (HttpURLConnection) url.openConnection(); con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");// IE代理进行下载 con.setConnectTimeout(120000); con.setReadTimeout(120000); // 获得网页返回信息码 responseCode = con.getResponseCode(); if (responseCode == -1) { System.out.println(url.toString() + " : connection is failure..."); con.disconnect(); return null; } if (responseCode >= 400) //请求失败 { System.out.println("请求失败:get response code: " + responseCode); con.disconnect(); return null; } InputStream inStr = con.getInputStream(); InputStreamReader istreamReader = new InputStreamReader(inStr, encode); BufferedReader buffStr = new BufferedReader(istreamReader); String str = null; while ((str = buffStr.readLine()) != null) contentBuffer.append(str); inStr.close(); } catch (IOException e) { e.printStackTrace(); contentBuffer = null; System.out.println("error: " + url.toString()); } finally { con.disconnect(); }

java根据模板修改内容后,生成word,修改后内容中文乱码

Java code package com.sunyard.test; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.text.SimpleDateFormat; import java.util.Date; public class OperatorRTF { /** * 字符串转换为rtf编码 * * @param content * @return */ public String strToRtf(String content) { try { System.out.println(content); content=new String(content.getBytes(),"GB2312"); System.out.println(content); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } char[] digital = "0123456789ABCDEF".toCharArray(); StringBuffer sb = new StringBuffer(""); byte[] bs = null; bs = content.getBytes(); int bit; for (int i = 0; i < bs.length; i++) { bit = (bs[i] & 0x0f0) >> 4; sb.append("\\'"); sb.append(digital[bit]); bit = bs[i] & 0x0f; sb.append(digital[bit]); } return sb.toString(); } /** * 替换文档的可变部分 * * @param content * @param replacecontent * @param flag * @return */ public String replaceRTF(String content, String replacecontent, int flag) { String rc = strToRtf(replacecontent); String target = ""; System.out.println(rc); if (flag == 0) { target = content.replace("$timetop$", rc); } if (flag == 1) { target = content.replace("$info$", rc); } if (flag == 2) { target = content.replace("$idea$", rc); } if (flag == 3) { target = content.replace("$advice$", rc); } if (flag == 4) { target = content.replace("$infosend$", rc); } return target; } /** * 获取文件路径 * * @param flag * @return */ public String getSavePath() { String path = "D:\\"; File fDirecotry = new File(path); if (!fDirecotry.exists()) { fDirecotry.mkdirs(); } return path; } /** * 半角转为全角 */ public String ToSBC(String input) { char[] c = input.toCharArray(); for (int i = 0; i < c.length; i++) { if (c[i] == 32) { c[i] = (char) 12288; continue; } if (c[i] < 127) { c[i] = (char) (c[i] + 65248); } } return new String(c); } public void rgModel(String username, String content) { /* 构建生成文件名 targetname:12时10分23秒_username_记录.rtf */ Date current = new Date(); SimpleDateFormat sdf = new java.text.SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); String targetname = sdf.format(current).substring(11, 13) + "时"; targetname += sdf.format(current).substring(14, 16) + "分"; targetname += sdf.format(current).substring(17, 19) + "秒"; targetname += "_" + username + "_记录.doc"; /* 字节形式读取模板文件内容,将结果转为字符串 */ String strpath = getSavePath(); String sourname = strpath + "\\" + "档案利用登记单.rtf"; String sourcecontent = ""; InputStream ins = null; try { ins = new FileInputStream(sourname); byte[] b = new byte[1024]; if (ins == null) { System.out.println("源模板文件不存在"); } int bytesRead = 0; while (true) { bytesRead = ins.read(b, 0, 1024); // return final read bytes // counts if (bytesRead == -1) {// end of InputStream System.out.println("读取模板文件结束"); break; } // convert to string using bytes sourcecontent += new String(b, 0, bytesRead); } } catch (Exception e) { e.printStackTrace(); } /* 修改变化部分 */ String targetcontent = ""; /** * 拆分之后的数组元素与模板中的标识符对应关系 array[0]:timetop array[1]:info array[2]:idea * array[3]:advice array[4]:infosend */ String array[] = content.split("~"); // 2008年11月27日:更新模板之后时间无需自动填充 for (int i = 0; i < array.length; i++) { if (i == 0) { targetcontent = replaceRTF(sourcecontent, array[i], i); } else { targetcontent = replaceRTF(targetcontent, array[i], i); } } /* 结果输出保存到文件 */ try { FileWriter fw = new FileWriter(getSavePath() + "\\" + targetname, true); PrintWriter out = new PrintWriter(fw); System.out.println(targetcontent); if (targetcontent.equals("") || targetcontent == "") { out.println(sourcecontent); } else { out.println(targetcontent); } out.close(); fw.close(); System.out.println(getSavePath() + " 该目录下生成文件" + targetname + " 成功"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { OperatorRTF oRTF = new OperatorRTF(); // 被替换内容以"~"符号分割,处理的时候将其拆分为数组即可 String content = "2008Y10M12D9H-2008Y10M12D6H~idea~look~我们参照检验药品的方法~we"; oRTF.rgModel("cheney", content); } } 上面的代码是我在网上找到的一种java操作word的方法 java读取word文档时,虽然网上介绍了很多插件poi、java2Word、jacob、itext等等,poi无法读取格式(新的API估计行好像还在处于研发阶段,不太稳定,做项目不太敢用);java2Word、jacob容易报错找不到注册,比较诡异,我曾经在不同的机器上试过,操作方法完全一致,有的机器不报错,有的报错,去他们论坛找高人解决也说不出原因,项目部署用它有点玄;itxt好像写很方便但是我查了好久资料没有见到过关于读的好办法。经过一番选择还是折中点采用rtf最好,毕竟rtf是开源格式,不需要借助任何插件,只需基本IO操作外加编码转换即可。rtf格式文件表面看来和doc没啥区别,都可以用word打开,各种格式都可以设定。 ----- 实现的功能:读取rtf模板内容(格式和文本内容),替换变化部分,形成新的rtf文档。 ----- 实现思路:模板中固定部分手动输入,变化的部分用$info$表示,只需替换$info$即可。 1、采用字节的形式读取rtf模板内容 2、将可变的内容字符串转为rtf编码 3、替换原文中的可变部分,形成新的rtf文档 这是原作者的想法,可我在使用过程中,发现替换内容中(我们参照检验药品的方法)这个中文,是不能显示的,在word里,把它转换成了iso-8859-1的编码了,不能正常显示中文,我都不知道应该在哪设置编码,才能让它正常显示,原word模板中的中文,可以正常显示,应该是在读取word模板的时候,把编码方式也读进去了,现在就是想请教一下前辈们,应该如何后,自己修改的那些中文,也可以正常显示呢 [b]问题补充:[/b] 汗,这里好象自己不能回复,所以我以这种形式回复。 先感谢一楼,二楼的回答,昨天我有事,请假没上班,所以没能及时回复,先道个歉。 先回答1楼的,在写的时候,我设置编码的话,感觉是无效的,不管我怎么设置,都没用。 再回答2楼的,特别说一下,我试了一下,发现生成的word里,那些修改部分的中文的编码形式改变了,只是还是乱码。后来我把unicode,ISO-8859-1,UTF-8,GB2312,GBK,甚至ASCII都试过了, word里都是不同形式的乱码,就是不出现汉字,真闷,我感觉是在 bs = content.getBytes("unicode"); 后,系统后来又默认的把这把转成了ISO-8859-1的形式. 可是 bs = content.getBytes("ISO-8859-1"); 我这么设置,word里的汉字是????? 真不知道为什么,要是ISO-8859-1,转ISO-8859-1,应该不会改变的哎 希望高手们,能继续解答,谢谢 [b]问题补充:[/b] 汪兆铭,您好,我不知道您一直观注这个问题,我以为要过会才能看到您的回答,所以,现在才刷新了这个页面,不好意思,先道个歉。 现在回到问题中,我照您的意思, bs = content.getBytes("unicode"); 改了一下,然后输入,可是依然不能正常显示中文,是不是,在哪,还需要再转换一次呢? [b]问题补充:[/b] mirzlm@126.com 谢谢,不知道与jdk版本或是什么的没有关系 [b]问题补充:[/b] 汪兆铭,您好,我看了一下您发的东西,我发现了问题的所在,竟然是在表格单元格里面的,就替换出来的是乱码,在表格单元格外面的,是可以正常显示的,您可以去试试,把替换的那个,放在表格里,看看,会不会成功,谢谢你的帮助 [b]问题补充:[/b] 谢谢您,给我这么多的帮助,那应该是我的那个rtf模板的问题了,真的很感谢,谢谢,谢谢,再谢谢

HttpURLConnection的字符流中文乱码

程序是UTF-8编码,我通过HttpURLConnection获得网页源代码 InputStream in = urlConnection.getInputStream(); BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(in)); StringBuffer temp = new StringBuffer(); String line = bufferedReader.readLine(); while (line != null) { temp.append(line).append("\r\n"); line = bufferedReader.readLine(); } bufferedReader.close(); String txt = new String(temp.toString().getBytes(), "utf-8"); System.out.println(txt); 我在Eclipse的控制台中打印正常,在CMD下运行中文就乱码了,打包成jar运行也是乱码, 请问如何解决?

java流字符乱码问题,求助!

地址https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443,结果为GBK编码,获取手机号码归属地以后,发现获得字符结果中中文乱码,麻烦大神指教,谢谢!以下提出部分代码。 HttpClient client = new DefaultHttpClient();//浏览器客户端 HttpGet request = new HttpGet(sb.toString());//get请求对象 HttpResponse response = client.execute(request);//执行请求 if(response.getStatusLine().getStatusCode() == 200){//判断请求是否成功 InputStream inputStream = response.getEntity().getContent();//获取实体 从实体里面获取流数据 ByteArrayOutputStream bos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while((len = inputStream.read(buffer)) != -1){ bos.write(buffer, 0, len); } result = bos.toString(); bos.close(); inputStream.close(); } return result; ``` ```

InputStream to String,编码格式设置为GBK应该怎么操作

由于在使用ORACLE和iReport,但是iReport里面不支持CLOB,我又写了个类,把CLOB字段指定为InputStream,然后通过转换变成String。 英文是可以的,但是中文就不行了,以下是部分代码: public String inputStream2String (InputStream in) throws IOException { StringBuffer out = new StringBuffer(); byte[] b = new byte[4096]; for (int n; (n = in.read(b)) != -1;) { out.append(new String(b, 0, n)); } return out.toString(); } 里面加这么一句: String clob = new String(out.toString().getBytes("iso8859-1"),"gb2312"); return clob; 返回的还是乱码。 怎么做下编码格式的转换?分不多,但是很急,希望大家能帮忙。 [b]问题补充:[/b] to lovewhzlq: 不行,还是乱码。 [b]问题补充:[/b] to layer555: 谢谢,有变化,但还是乱码。 是不是InputStream to byte 的过程也要转下? [b]问题补充:[/b] to ywbanm: 是GB2312,IR是一种报表软件,似乎只支持UTF-8,于是我把项目编码改成UTF-8,代码里也写成UTF-8,一样还是乱码。 谢谢 :oops: [b]问题补充:[/b] 最后还是使用了Object的方式解决了乱码的问题,谢谢大家。

文件后缀名乱码怎么解决..

今天遇到一个奇葩需求,文件后缀名是中文的. 例子:文件名.后缀名 文件名不会乱码,但是后缀名会乱码,求大神指点.. 后台是java的. 而且就ie8不行,使用其他浏览器,以及高版本ie显示正常. ``` @RequestMapping("/download") public HttpServletResponse download(String fileName, HttpServletRequest request, HttpServletResponse response,String fileUrl) throws Exception { try { //获得文件 File file = new File(fileUrl); //获取文件名 fileName = URLDecoder.decode(fileName,"utf-8"); //获得文件后缀名 String ext = fileName.substring(fileName.indexOf(".")+1).toUpperCase(); //以流的形式下载文件 InputStream is = new BufferedInputStream(new FileInputStream(file)); byte[] buffer = new byte[is.available()]; is.read(buffer); is.close(); //设置response header response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes())); response.addHeader("Content-Length", "" + file.length()); OutputStream toClient = new BufferedOutputStream(response.getOutputStream()); response.setContentType("application/octet-stream"); toClient.write(buffer); toClient.flush(); toClient.close(); } catch (IOException e) { e.printStackTrace(); } return response; } ``` ![图片说明](https://img-ask.csdn.net/upload/201601/14/1452738557_70746.png)![图片说明](https://img-ask.csdn.net/upload/201601/14/1452738580_556892.png)

用base64解码以后得到的是乱码怎么办

是这样的 我发送了一个个体请求 服务器给我的响应是一个json 其中有一个明显是用base64加密后的结果 于是我就用base64解密 本来结果应该是中文字符串的 但是我这边显示的却是乱码 请问是为什么 是还作了什么处理吗?我得到的base64加密后的结果如下 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z73ytY7ya47iiVmxiLoxhM/ah53ye7ayfM7xhb7aib7ycoCxhLiyvWswtVYzaVQyiWKxheezf6wzuV/azbGzzX/ctdCyw4maaYmaaMiiiVmaebQaz7GyfYUzzX/xh47xhbmzeXUyuLCyu7ezanKazbGiiVmavoayvXiycXsiiVmavoayvXizhVKzibwwtVUzzV7xhd7wtVUzaVaacM7iiVmyub3cuL3xhVeciMQyvWwzgosazbGydVCydVCycYGctXQyabiiiVmah5axheeyibwafe7atoKzgYizf7mazbGzuW/bc4awtVV8LaViChBNtBBNtBXNaBrydBF7gmR45M2K44PP4bPq6VXy56TI55dR5nJm5YzL5Ldu5MTL6M2v5crt6XTb5bBS44PPCTWlYm7wtVQwtVQvtWmah5awtVYvtW08LaViChBNtBBNtBJ5gBv9h+F6hhnHghJoahnpvrnjyBnKbBJXz+rnuBroehJSvr+8wBF7whJCb+vvv+zUwBnBw+JUhhF4tBJ8bBzFahrydBzNxhv/u+JBh+BNtwkvpv8+44PN44PN5nJm5YzL5Ldu5MTL5bFw5YdT5bFw77lZ6LXw5olt5clf5oPk6VXy56TI55dR6VF477lZ56hY6nzf5L+L5o6K5YvA5nJ955lY5YdT77ln4bPp5Y2t6Y+M5cvi5YhN5YzV6MXk77ls6LPK5bvE546c5MTv77ls77lO4bPqCTWlYm7wtVQwtVQvtWmbi5acxeUvtXovtXoxhV3bt73ayXwiiW/vtW3yhoGbioixheeazeUaaVawtVV8LaViChBNtBBNtBXNaBF4wrvQir+8trXNarJyf+F5zBJXbrJEzBJ+vBF4wrJCv+JJuBBNtwkvpv8+44PN44PN4bPp55+y6LTG5YdT44PP4bPqCTWlYm7wtVQwtVQyhoGbioixheebtYwxhbobtYwbtdabubQiiVmye7abinoywdYcu4mazbGxhMwyedYcy67ctMCiiWevtWmbe7scy67iiVmzaVazfdUzaVaxheeyhX7zvWUzwnYxhVQxhVicxeUiiW/zeXsyuLCyuMUyw6GywL7yhVUiiVmxhVQze5GxhVQwtVYvtW08LaViChBNtBBNtBv9chJBbhzUwBzpwhnKghzKgBF4tBrWu+ngh+Jith+8wBnKbBnIfBroehJSvrvOzhrR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

解析zip时压缩文件内包含中文名称 ZipInputStream不能支持中文如何解决

<div class="iteye-blog-content-contain" style="font-size: 14px;"> <p><span>图中圈住部分报错,应该就是由于文件名称包含中文导致,网上说需要修改ZipInputStream类,这个方法大神们就不要说了,需要别的方案并且详细一下,分很多可以追加!!!</span></p> <p> </p> </div>

JAVA调用python代码 中文返回乱码 有什么好解决的办法吗?

通过下面这种方式调用 ``` Process process = Runtime.getRuntime().exec(cmdArr); ``` 输入流读取 ``` InputStream is = process.getInputStream(); DataInputStream dis = new DataInputStream(is); str = dis.readLine(); ``` 下面是日志 ![图片说明](https://img-ask.csdn.net/upload/201912/04/1575446450_283848.png) 直接执行python代码 就会返回正确结果 用流去接收就会出现乱码

地磅取数java开发,从串口获取到的数据全是乱码,请教各位老师如何解决!

jar包使用的是RXTXcomm.jar; 获取串口及串口参数设置代码都是借用的网络上的,略; 得到输入流对象,InputStream inputStream = serialPort.getInputStream(); 读取数据,inputStream.read(buffer, 0, buffer.length); 发现buffer中读到的数据全是乱码,既不是Ascii码也不是十六进制数,不知道是什么,也不知道该往哪个方向考虑解析。 自学java,菜鸟级别,第一次接触串口开发,望各位老师指导下,感激!

关于HttpURLConection的POST请求乱码

我在用HttpURLConection发送POST请求时,并未包含中文,但自己测试时收到的请求前面总是包含几个乱码, 求高手解决! 代码如下: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; public class HttpUtil { /** * 发送http POST请求 * @param httpUrl 请求URL * @param httpContext 请求报文主体内容 * @return * @throws IOException */ public static String sendPost(String httpUrl,String httpContext) throws IOException{ URL url = new URL(httpUrl); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); connection.setRequestMethod("POST"); // 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在http正文内,因此需要设为true,默认情况下是false; connection.setDoOutput(true); connection.setRequestProperty("Content-Type","application/json; encoding=utf-8"); connection.setRequestProperty("Connection", "keep-alive"); OutputStream out = connection.getOutputStream(); // 现在通过输出流对象构建对象输出流对象,以实现输出可序列化的对象。 ObjectOutputStream objOut = new ObjectOutputStream(out); objOut.writeObject(httpContext); // 向对象输出流写出数据,这些数据将存到内存缓冲区中 out.close(); objOut.close(); // 关闭对象输出流 InputStream in = connection.getInputStream(); InputStreamReader inr = new InputStreamReader(in); BufferedReader reader = new BufferedReader(inr); StringBuffer result = new StringBuffer(); String temp; while((temp = reader.readLine()) != null){ result.append(temp); } in.close(); return result.toString(); } }![图片说明](https://img-ask.csdn.net/upload/201603/31/1459432823_889611.png)

Java 通过HttpURLConnection获取URL接口的返回数据中含有少数民族语言变成了乱码

各位大神 private static String getJson(String url){ // String url = "http://data1.cnr.cn/minzu_hanyuzhuan/phpencode.php?word="+para; URL oldUrl; StringBuffer buffer = null; try { oldUrl = new URL(url); HttpURLConnection con = (HttpURLConnection) oldUrl.openConnection(); con.setRequestMethod("GET"); con.addRequestProperty("Content-Type", "application/json;charset=utf-8"); con.connect(); InputStream in = con.getInputStream(); BufferedReader bf=new BufferedReader(new InputStreamReader(in,"UTF-8")); buffer=new StringBuffer(); String line=""; while((line=bf.readLine())!=null){ buffer.append(line); } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } String json = buffer.toString(); return json; } 该方法得到的json字符串中的少数民族语言都是乱码,该怎么解决这个问题?

Geotools 创建shape文件报错,无法设置中文属性

feature.setAttribute(0, polygon.getCode()); 这个属性名乱码,如果设置成中文就报错 eg: feature.setAttribute("图斑编码", polygon.getCode()); ``` package com.kero99.utils; /** * 创建shape文件 * @author ygc * */ import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Serializable; import java.io.StringReader; import java.io.StringWriter; import java.net.MalformedURLException; import java.net.URLEncoder; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TreeMap; import org.geotools.data.FeatureWriter; import org.geotools.data.FileDataStore; import org.geotools.data.FileDataStoreFinder; import org.geotools.data.Transaction; import org.geotools.data.shapefile.ShapefileDataStore; import org.geotools.data.shapefile.ShapefileDataStoreFactory; import org.geotools.data.shapefile.dbf.DbaseFileHeader; import org.geotools.data.shapefile.dbf.DbaseFileReader; import org.geotools.data.shapefile.files.ShpFiles; import org.geotools.data.simple.SimpleFeatureCollection; import org.geotools.data.simple.SimpleFeatureIterator; import org.geotools.data.simple.SimpleFeatureSource; import org.geotools.feature.IllegalAttributeException; import org.geotools.feature.simple.SimpleFeatureBuilder; import org.geotools.feature.simple.SimpleFeatureTypeBuilder; import org.geotools.feature.type.Types; import org.geotools.geojson.feature.FeatureJSON; import org.geotools.geojson.geom.GeometryJSON; import org.geotools.referencing.crs.DefaultGeographicCRS; import org.geotools.util.Converters; import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.GeometryFactory; import org.locationtech.jts.geom.Point; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.feature.type.AttributeDescriptor; import com.kero99.patterns.IShape; import com.kero99.pojo.Zdesignpolygon; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.MultiPolygon; import net.sf.json.JSONArray; import net.sf.json.JSONObject; /** * Geotools文档:http://docs.geotools.org/latest/javadocs/ * 创建shape文件 * @author ygc * */ public class createShapeFile { public static void main(String[] args) throws IOException { //创建文件路径 String path="C:\\新建文件夹\\y.shp"; File file=new File(path); //创建坐标 String str="{\"type\":\"MultiPolygon\",\"coordinates\":[[[[125.00088033726706,43.40147359017337],[124.99679348328742,43.401096616676305],[124.99694837503591,43.40186442431018],[124.99750584741349,43.401955866321565],[124.99803787708493,43.40230992248794],[124.9980525639301,43.40490599341744],[124.99939124766493,43.4039525077194],[124.999703712491,43.4048699875539],[124.99866141203354,43.40606649155232],[125.00126143620331,43.40562431171862],[125.00257777597052,43.403552077651824],[125.00295876012552,43.40274710316431],[125.00307123554897,43.40186767450569],[125.00088033726706,43.40147359017337]]]]}"; JSONObject jsonObject = JSONObject.fromObject(str); JSONArray jsonArray = jsonObject.getJSONArray("coordinates"); System.out.println(jsonArray); //创建对象添加属性信息 Zdesignpolygon polygon=new Zdesignpolygon(); polygon.setCode("106"); polygon.setCoordinate(str); polygon.setMark("tktt3"); polygon.setName("土坎梯田"); polygon.setState("坡耕地"); polygon.setNumber(12.64); polygon.setSlope(9.0); //添加创建的路径 Map<String, Serializable> params = new HashMap<String, Serializable>(); params.put(ShapefileDataStoreFactory.URLP.key, file.toURI().toURL()); ShapefileDataStoreFactory sf = new ShapefileDataStoreFactory(); //创建shape文件数据仓库根据工厂 ShapefileDataStore ds = (ShapefileDataStore) sf.createDataStore(file.toURI().toURL()); ds.setCharset(Charset.forName("GBK")); //ShapefileDataStore ds = (ShapefileDataStore) new ShapefileDataStoreFactory().createDataStore(params); //创建要素模板 SimpleFeatureTypeBuilder tb = new SimpleFeatureTypeBuilder(); //设置wgs84格式 tb.setCRS(DefaultGeographicCRS.WGS84); //设置全局状态 tb.setName("shapefile"); //添加属性类型 tb.add("图斑编码", String.class); tb.add("措施代码", String.class); tb.add("措施名称", String.class); tb.add("利用现状", String.class); tb.add("措施数量", Double.class); tb.add("坡度", Double.class); tb.add("the_geom", MultiPolygon.class); //设置FeatureType数据存储。该方法将删除任何现有的本地资源或抛出IOException如果远程数据存储。 //这个元素附加源和附加Javadoc,因此没有能找到Javadoc。 ds.createSchema(tb.buildFeatureType()); //设置编码格式 //     类似的API FeatureReader后,调查组成员功能使用next()你可以叫删除()或修改后写()。 // 如果你不调用这两个方法调用之前hasNext(),或下(),这个功能将被修改的。 //   这个API允许修改,编写和基于过滤器的修改。请参阅ContentDataStore使用这个API实现共同opperations的例子。 // FeatureWriter<SimpleFeatureType, SimpleFeature> featureWriter = ds.getFeatureWriter(ds.getTypeNames()[0], Transaction.AUTO_COMMIT); FeatureWriter<SimpleFeatureType, SimpleFeature> featureWriter = ds.getFeatureWriter(ds.getTypeNames()[0], null); // FeatureWriter<SimpleFeatureType, SimpleFeature> featureWriter = ds.getFeatureWriter(Transaction.AUTO_COMMIT); SimpleFeature feature = featureWriter.next(); // 取出特征里面的属性集合 //添加属性值和坐标 feature.setAttribute(0, polygon.getCode()); feature.setAttribute(1, polygon.getMark()); feature.setAttribute(2, polygon.getName()); feature.setAttribute(3, polygon.getState()); feature.setAttribute(4, polygon.getNumber()); feature.setAttribute(5, polygon.getSlope()); //转换geojson GeometryJSON geometryJSON2 = new GeometryJSON(15); Geometry geometry = geometryJSON2.read(new StringReader(polygon.getCoordinate())); feature.setAttribute("the_geom", geometry); featureWriter.write(); featureWriter.close(); ds.dispose(); } protected boolean validating; protected Map<String, String> index; protected SimpleFeatureType featureType; protected Object[] values; public SimpleFeatureType getFeatureType() { return this.featureType; } // public void setAttribute(String name, Object value) { // String idx = this.index.get(name); // if (idx == null) { // throw new IllegalAttributeException("Unknown attribute " + name); // } else { // this.setAttribute(idx, value); // } // } } ```

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

Intellij IDEA 实用插件安利

1. 前言从2020 年 JVM 生态报告解读 可以看出Intellij IDEA 目前已经稳坐 Java IDE 头把交椅。而且统计得出付费用户已经超过了八成(国外统计)。IDEA 的...

搜狗输入法也在挑战国人的智商!

故事总是一个接着一个到来...上周写完《鲁大师已经彻底沦为一款垃圾流氓软件!》这篇文章之后,鲁大师的市场工作人员就找到了我,希望把这篇文章删除掉。经过一番沟通我先把这篇文章从公号中删除了...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

魂迁光刻,梦绕芯片,中芯国际终获ASML大型光刻机

据羊城晚报报道,近日中芯国际从荷兰进口的一台大型光刻机,顺利通过深圳出口加工区场站两道闸口进入厂区,中芯国际发表公告称该光刻机并非此前盛传的EUV光刻机,主要用于企业复工复产后的生产线扩容。 我们知道EUV主要用于7nm及以下制程的芯片制造,光刻机作为集成电路制造中最关键的设备,对芯片制作工艺有着决定性的影响,被誉为“超精密制造技术皇冠上的明珠”,根据之前中芯国际的公报,目...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

百度工程师,获利10万,判刑3年!

所有一夜暴富的方法都写在刑法中,但总有人心存侥幸。这些年互联网犯罪高发,一些工程师高技术犯罪更是引发关注。这两天,一个百度运维工程师的案例传遍朋友圈。1...

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《Oracle Java SE编程自学与面试指南》最佳学习路线图2020年最新版(进大厂必备)

正确选择比瞎努力更重要!

字节跳动面试官竟然问了我JDBC?

轻松等回家通知

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

实时更新:计算机编程语言排行榜—TIOBE世界编程语言排行榜(2020年6月份最新版)

内容导航: 1、TIOBE排行榜 2、总榜(2020年6月份) 3、本月前三名 3.1、C 3.2、Java 3.3、Python 4、学习路线图 5、参考地址 1、TIOBE排行榜 TIOBE排行榜是根据全世界互联网上有经验的程序员、课程和第三方厂商的数量,并使用搜索引擎(如Google、Bing、Yahoo!)以及Wikipedia、Amazon、YouTube统计出排名数据。

立即提问
相关内容推荐