关于java 日文输出信息到 Jenkins Console Output 乱码问题
2015-04-01 15:30
369 查看
java 将从读取到的外部调用程序的带有日文字符的输出信息 输出到Jenkins 上的Console Output 上乱码。
更改了自己机器和日本机器Eclipse里的各种encoding的设置,改成UTF-8也是没有任何用处。
从网上看了好多关于Java编码的问题,最后找到问题的根源在于InputStreamReader 的编码问题。
InputStreamReader是字节流通向字符流的桥梁,封裝了InputStream在里头, 它以较高级的方式,一次读取一个一个字符,以文本格式输入 / 输出,可以指定编码格式;
它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。 为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。例如:
BufferedReader
in = new BufferedReader(new InputStreamReader(System.in));
BufferedReader 由Reader类扩展而来,提供通用的缓冲方式文本读取,而且提供了很实用的readLine,读取一个文本行,从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。BufferedReader的最大特点就是缓冲区的设置。通常Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求,如果没有缓冲,则每次调用
read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。
InputStreamReader最大的特点是可以指转换的定编码格式,这是其他类所不能的,从构造方法就可看出,一点在读取中文字符时非常有用。
知道了问题所在,就可以改代码了
现象分析:
Jenkins 上可以将日文正常显示出来,但是读取外部程序的输出信息的日文却不能正常显示。Java Console 输出 | Jenkins Console Output 输出调用程序的输出信息 | Jenkins Consloe Oputput 输出非调用程序的输出信息 |
正常 | 不正常 | 正常 |
原因解释
所以问题的关键还是在于读取外部程序输出信息的代码上。从网上看了好多关于Java编码的问题,最后找到问题的根源在于InputStreamReader 的编码问题。
InputStreamReader是字节流通向字符流的桥梁,封裝了InputStream在里头, 它以较高级的方式,一次读取一个一个字符,以文本格式输入 / 输出,可以指定编码格式;
它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。 为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。例如:
BufferedReader
in = new BufferedReader(new InputStreamReader(System.in));
BufferedReader 由Reader类扩展而来,提供通用的缓冲方式文本读取,而且提供了很实用的readLine,读取一个文本行,从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。BufferedReader的最大特点就是缓冲区的设置。通常Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求,如果没有缓冲,则每次调用
read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。
InputStreamReader最大的特点是可以指转换的定编码格式,这是其他类所不能的,从构造方法就可看出,一点在读取中文字符时非常有用。
知道了问题所在,就可以改代码了
代码
try { BufferedReader br1 = new BufferedReader(new InputStreamReader(br,"UTF-8")); String line1 = null; while ((line1 = br1.readLine()) != null) { if (line1 != null){ logger.info("info: "+line1); } } } catch (IOException e) { e.printStackTrace(); }
相关文章推荐
- All About JAVA 关于英文服务器下输出含有中文字符文件乱码的问题
- 关于Java奇数最后一个字符输出乱码问题
- [Java Web]Mac OSX中MyEclipse的Console输出乱码的问题
- 关于断点调试输出信息出不来,用po打印变量也没有值的问题
- MyEclipse或者Eclipse控制台(Console)中的中文输出乱码问题
- 关于python在cmd中输出中文乱码的问题
- Java 使用Charset类解决读入字符乱码问题和控制输出字符编码
- 关于Eclipes控制台中文输出乱码问题
- javaweb开发中关于字符编码出现乱码问题的总结
- Java将一般信息输出到console,将错误信心输出到文件
- 关于java文件下载文件名乱码问题解决方案
- 关于Java控制台输入输出乱码问题(转载)
- 关于Java web开发中的中文乱码问题
- 关于java web项目中文乱码问题
- 关于java 向图片添加文字时的乱码问题
- 关于java web中get方法的解决中文乱码问题
- 关于c++与java中文乱码问题分析与解决
- java从终端输入再输出中文为乱码的问题
- 关于JavaBean获取中文乱码问题
- 关于Java控制台输入输出乱码问题(转载)