`

eclipse的控制台在UTF-8编码下键盘输入BUG问题,请问有谁能解决

 
阅读更多

最近我在eclipse下测试中文字符的输入输出问题,发现eclipse下控制台的编码设置为utf-8时,当从eclipse控制台录入汉字后,会出现乱码问题。

虽然这个问题看起来在实践中用量不大,但是对于理解字符编码有作用的。

 

场景如下:

eclipse控制台编码设置为utf-8,设置位置如图:

 

 

 再来设置file.encoding的编码,目的是为了设置java程序的默认编码。

 

 

 测试程序如下:

 

public class CharsetCodingOutTest {
	
	public static void main(String[] args) throws IOException{
		System.out.println("平台使用默认编码:"+System.getProperty("file.encoding"));
		System.out.println(Charset.defaultCharset());
		/**
		 * 文件输入流,只要按照正确编码读取,就没有问题。
		  这么做的目的是为了测试后面的程序是否正确。真正需要做的是用键盘输入流代替文件输入流

		 */
		//InputStream is=new FileInputStream("d:\\test\\test_utf8.txt");
		/**
		 * 键盘输入流
		 */
		InputStream is=System.in;
		/**
		 * 下面的编码如果没有设置对的话,就会出现解码错误,以后就可能不能恢复了。
		 * 
		 * 一般用ISO8859-1 和gbk来解码其它的字符编码,错误了,还可以恢复。
		 * 但是如果用utf-8 来解码utf-8或者用gb2312解码utf-8的字符编码,错误了,就不能恢复了。
		 * 
		 * 总之用错编码解码时,只要能解码对应到任何一个存在的字符时,就可以恢复。
		 * 如果解码时,映射不到一个字符时,就会用?代替,这样就恢复不了啊。
		 */
		InputStreamReader isr=new InputStreamReader(is,"UTF-8");//,"UTF-8"
		
		BufferedReader br = new BufferedReader(isr); 
		String s = br.readLine();
		br.close();
		//目前控制台编码是UTF-8,程序默认输出也是UTF-8,所以下面的输出应该是没有问题。除非读取的s字符串在InputStreamReader中解码错误了。
		System.out.println(s);
		//System.out.write(s.getBytes("GBK"));
		//System.out.println();
		//目前控制台编码是UTF-8,指定以UTF-8码输出到控制台,所以下面的输出应该是没有问题。除非读取的s字符串在InputStreamReader中解码错误了。
		System.out.write(s.getBytes("UTF-8"));
	}

}

 如果是从一个utf-8的文件中读取汉字,然后输出到eclipse控制台,这个程序是没有问题的,可以正确输出汉字。

可是从eclipse的控制台下读取汉字,就会出现乱码。

 

所以键盘输入流的解码错误了,那么应该用什么编码进行解码读取呢。

 

我的思路是:

1、首先对键盘输入流读取的汉字进行解码,

2、然后jvm虚拟机会进行转换成unicode码加载到内存中,

3、jvm把unicoe转换成程序指定的编码,然后输出到控制台

4、控制台再用指定的编码进行显示。

 

 

请哪位高手指点迷津,帮我解决。

 

 

 

 

  • 大小: 141.5 KB
  • 大小: 112.9 KB
分享到:
评论
1 楼 phili1999 2013-11-07  
兄弟,此乃Eclipse的bug,至今未解决,可见国人地位低啊。
解决办法很简单,在Eclipse运行目录的配置文件eclipse.ini中加入
-Dfile.encoding=UTF-8 启动后你的中文就出来了。
我测试过代码,在inputstream中字节数就已经乱码了,一个"中”字返回的字节数竟然是6个字节,6字节啊。。。UTF-8还没准备启用呢。

相关推荐

    Eclipse项目的GBK编码转为UTF-8插件

    总的来说,"Eclipse项目的GBK编码转为UTF-8插件"是解决GBK到UTF-8编码转换问题的有效工具,它简化了开发者的工作流程,提高了代码管理的效率。对于那些经常需要处理不同编码格式项目的人来说,这样的工具无疑是非常...

    eclipse默认编码GBK改为UTF-8

    Eclipse是一款广泛使用的Java集成开发环境(IDE),它在默认情况下使用GBK编码,这可能会对处理UTF-8编码的项目造成困扰。GBK是中国大陆广泛采用的一种汉字编码标准,而UTF-8是国际化的多语言字符编码,能支持世界上...

    utf-8码转换器(转换成utf-8码)

    因此,通过转换器将GBK编码转换为UTF-8编码,可以确保文本在各种系统和语言环境中都能正确显示。 4. **编码转换工具的实现**: - 接收输入:用户可以通过文本框或者文件选择功能输入或导入非UTF-8编码的文本。 - ...

    IDE(eclipse)设置编码格式为UTF-8.txt

    IDE(eclipse)设置编码格式为UTF-8IDE(eclipse)设置编码格式为UTF-8

    eclipse中class乱码GBK-UTF-8转换工具

    在Eclipse中,如果你的源代码或者类文件(.class)是以GBK编码保存,而Eclipse默认配置为UTF-8,那么在打开或读取这些文件时就可能出现乱码。 解决这个问题通常需要以下步骤: 1. **设置Eclipse编码**:首先,确保...

    使用eclipse插件批量将Java源代码文件的编码从GBK(或其他编码)转为UTF-8

    如果发现有乱码,可能是因为文件原本就存在编码问题,或者某些特殊字符不被UTF-8支持,此时可能需要手动修正。 6. **保存设置**:为了防止后续新增或导入的文件使用默认编码,需要在Eclipse的工作空间设置中全局...

    设置myeclipse新建jsp文件默认编码为UTF-8

    对于较老版本的MyEclipse(如MyEclipse 6.0),可以在**Preferences** > **MyEclipse** > **Files and Editors**下设置具体的文件类型(如css、dtd、html、js、jsp)的编码方式为UTF-8。 #### 四、总结 通过以上三...

    eclispe GBK转UTF-8乱码解决

    本文将详细讨论如何在Eclipse中解决GBK转UTF-8乱码的问题,以及介绍一种插件工具来帮助统一编码格式。 首先,我们需要了解GBK和UTF-8编码的区别。GBK是中国大陆的标准汉字编码,它是GB2312的扩展,包含更多的汉字和...

    批量将Java源代码文件的编码从GBK转为UTF-8

    老项目采用GBK编码格式,而新项目采用的UTF-8编码格式,如果直接把Java源代码复制到Eclipse中所有的中文信息会出现乱码。所以写了个小的方法类,将java文件的编码格式从GBK转UTF-8

    解决IDEA不支持带BOM的UTF-8编码文件,使支持

    2. 如果你是其他版本的IDEA,那么用压缩工具处理你的DEA安装目录下lib文件夹中的ecj-x.x.x.jar文件(名字根据IDEA版本会有所不同),将Util.class替换该jar包目录中\org\eclipse\jdt\internal\compiler\util路径下的...

    IDEA支持带BOM的UTF-8编码文件的解决方案

    2. 如果你是其他版本的IDEA,那么用压缩工具处理你的DEA安装目录下lib文件夹中的ecj-x.x.x.jar文件(名字根据IDEA版本会有所不同),将Util.class替换该jar包目录中\org\eclipse\jdt\internal\compiler\util路径下的...

    freemarker入门实例(解决乱码eclipse/java/编码方式UTF-8)

    本实例将引导你入门Freemarker,解决在Eclipse环境下使用Java编译时可能出现的乱码问题,并确保使用UTF-8编码方式进行处理。 **1. Freemarker简介** Freemarker是一个基于模板的开源Java库,它与Spring MVC、Struts...

    开发工具 eclipse-jee-mars-2-win32

    开发工具 eclipse-jee-mars-2-win32开发工具 eclipse-jee-mars-2-win32开发工具 eclipse-jee-mars-2-win32开发工具 eclipse-jee-mars-2-win32开发工具 eclipse-jee-mars-2-win32开发工具 eclipse-jee-mars-2-win32...

    .java文件中GBK编码转UTF-8编码

    在eclispe的项目中,有存在项目字符集和工作空间字符集不匹配,该jar只能将项目文件中的.java结尾的文件转为utf8编码,并且源文件必须为gbk编码的,否则乱码

Global site tag (gtag.js) - Google Analytics