java乱码问题分析和解决
·
java乱码问题分析和解决
jvm启动时使用系统默认编码来作为file.encoding,其中file.encoding会影响默认的输出编码,所以只需要统一cmd的显示编码,让cmd能够显示中文,其次再调整jvm的默认编码,让jvm默认输出到标准输出时采用默认编码
例如修改cmd的chcp为65001,让cmd支持utf8,接着添加jvm参数-Dfile.encoding=utf8,让jvm输出的编码默认为utf8即可
chcp 65001
或者修改cmd的chcp为65001,接着修改system.out采用的编码,也可以正常输出utf8格式的字符串
//修改输出的编码为utf8
System.setOut(new PrintStream(System.out,true,"utf-8"));
System.out.println("世界");
System.out.println(System.getProperty("file.encoding"));
byte[] d="世界".getBytes(StandardCharsets.UTF_8);
//直接输出utf8的世界字符串的二进制,这样不需要对jvm做任何参数调整只需要对cmd做显示的编码设置即可正常输出
//这也说明了java会对字符串输出做编码处理,而纯二进制不会,也就把问题定位到了java上
byte[] data=new byte[]{-28,-72,-106,-25,-107,-116};
System.out.write(data);
如果使用powershell,修改ps本身的输出编码,接着让jvm输出utf8编码即可
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
powershell的chcp命令不影响任何东西
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)