知识大全 用java在Windows控制台输出utf8字符

Posted 字符

篇首语:卧疾丰暇豫,翰墨时间作。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 用java在Windows控制台输出utf8字符相关的知识,希望对你有一定的参考价值。

用java在Windows控制台输出utf8字符  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  最近开发java控制台项目 由于用了第三方库 必须使用utf 字符 当然在开发环境eclipse下 显示是正常的

   

  但是windows的控制台 却是输出乱码

   

    虽然不改 程序逻辑是正确 作为偏执狂还是翻阅了各种资料                         网上各种文章 不是用chcp改变控制台编码 就是建议修改程序编码为GBK         参考了stackoverflow的一篇文章 找到一种使用Windows内核API的方案        utf and windows console        核心是封装一个Console类        package demo;import sun jna Native;import sun jna Pointer;import sun jna ptr IntByReference;import sun jna win StdCallLibrary;/** * For unicode output on windows platform *  * @author Sandy_Yin *  */public class Console private static Kernel INSTANCE = null;public interface Kernel extends StdCallLibrary public Pointer GetStdHandle(int nStdHandle) public boolean WriteConsoleW(Pointer hConsoleOutput char[] lpBuffer int nNumberOfCharsToWrite IntByReference lpNumberOfCharsWritten Pointer lpReserved) static String os = System getProperty( os name ) toLowerCase() if (os startsWith( win )) INSTANCE = (Kernel ) Native loadLibrary( kernel Kernel class) public static void print(String message) if (!prePrint(message))System out print(message) protected static boolean prePrint(String message) boolean successful = false;if (INSTANCE != null) Pointer handle = INSTANCE GetStdHandle( ) char[] buffer = message toCharArray() IntByReference lpNumberOfCharsWritten = new IntByReference() successful = INSTANCE WriteConsoleW(handle buffer buffer length lpNumberOfCharsWritten null) return successful;public static void println(String message) // from// utf and windows consoleif (prePrint(message)) System out println() else System out println(message)         对输出进行测试 使用命令 java jar sample jar 发现输出还是一样 添加命令行参数 使用java Dfile encoding=utf jar sample jar 就达到效果了 PS 此方法还存在一些缺陷 但并不是Console类造成的 上图中 测试 前有一个空白的地方 这是应为使用utf 方式读入非UTF 文件产生的 在文件开始会出现 代码下载 /Files/anic/utf sample_source zip/Files/anic/utf sample_runtime zip cha138/Article/program/Java/hx/201311/25701

相关参考

知识大全 使用java实现在文件中添加字符串

    我在一个项目中需要使用C:\\WINDOWS\\system\\drivers\\etc这个目录下的hosts文件并且在该文件的最后加上一个这样的字符串:   r

知识大全 c#中重定向windows控制台程序的输出信息

  这个问题来自社区提问代码保留一份用来以后回答      usingSystem;usingSystemComponentModel;usingSystemWindowsForms;namespac

知识大全 Java调用Windows控制台命令

Java调用Windows控制台命令  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  方法一  p

知识大全 在Java程序中截获控制台输出

在Java程序中截获控制台输出  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  即使在图形用户界面

知识大全 Java标准输出重定向到GUI

Java标准输出重定向到GUI  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  实现输出从控制台到

知识大全 用JAVA编程从键盘输入一个正整数,计算该数的各位数字之和并输出,例如输入数是5246

用JAVA编程从键盘输入一个正整数,计算该数的各位数字之和并输出,例如输入数是5246  以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的

知识大全 如何将结果输出到字符串里

   XslTransformTransform方法将结果输出到字符串里有中办法      通过SystemI

知识大全 ASP.NET 中字符的格式化输出

ASP.NET中字符的格式化输出  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!可以使用Format

知识大全 java和ant在windows下的环境变量的配置方法

  以下设置WinXP及以上用户右键点击我的电脑>属性>高级>环境变量设置即可设置完成后需重新启动命令提示符才能生效具体如下  JAVA环境变量设置  Windows下JAVA用到的

知识大全 在Java应用程序读取8位和24位Windows位图

在Java应用程序读取8位和24位Windows位图  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!