在命令行模式、eclipse console下执行Java程序输入中文的几种情况尝试

这篇具有很好参考价值的文章主要介绍了在命令行模式、eclipse console下执行Java程序输入中文的几种情况尝试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

介绍

在命令行模式下执行Java程序,如果输入中文,经常会出现和代码中的解码字符集不匹配的情况,导致结果不正确。
在命令行模式下执行Java程序,输入中文,其实是用某种字符集编码成字节流,Java程序读取该字节流,然后用某种字符集解码为字符。这个编码和解码的字符集要相同,才能正确。

看下面这段代码:

package com.thb;

import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

public class Test1 {
		
	public static void main(String[] args) {	
		InputStreamReader is = new InputStreamReader(System.in, Charset.forName("GBK"));		

		try {
			System.out.println(Integer.toHexString(is.read()));
		} catch (IOException e) {			
			e.printStackTrace();
		} finally {
			try {
				is.close();
			} catch (IOException e) {				
				e.printStackTrace();
			}
		}
		
	}
}

代码中的System.in是java.io.InputStream类型,代表了输入的字节流(此时还没有解码)。
java.io.InputStreamReader这个类可以完成从字节流到字符的解码过程。创建InputStreamReader实例的时候可以指定解码的字符集,如果没有指定,就用默认的字符集。
我就遇到了GBK、UTF-8情况下命令行输入和代码中解码的几种情况,摸索了好几个小时。把我尝试的几种情况(正确的、不正确)记录下来,方便后面查看。
java.io.InputStreamReader.read()返回值是一个整数,表示解码后字符对应的Unicode码点。

我们以中文的“中”字为例,它的码点是用十六进制表示是4e2d,这样后面的各种组合输出的结果跟这个对比下,就能看出来输出是否正确。

场景举例

cmd窗口下,编码是GBK;程序中解码是GBK

代码:

package com.thb;

import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

public class Test1 {
		
	public static void main(String[] args) {	
		InputStreamReader is = new InputStreamReader(System.in, Charset.forName("GBK"));		

		try {
			System.out.println(Integer.toHexString(is.read()));
		} catch (IOException e) {			
			e.printStackTrace();
		} finally {
			try {
				is.close();
			} catch (IOException e) {				
				e.printStackTrace();
			}
		}
		
	}
}

在cmd窗口中用chcp命令查看当前的编码是936,是GBK编码:
在命令行模式、eclipse console下执行Java程序输入中文的几种情况尝试,java,eclipse,Power Shell,windows cmd,Git Bash
执行Java程序,在窗口中输入“中”,输出结果正确:
在命令行模式、eclipse console下执行Java程序输入中文的几种情况尝试,java,eclipse,Power Shell,windows cmd,Git Bash

cmd窗口下,编码是GBK;程序中解码是UTF-8

代码:

package com.thb;

import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

public class Test1 {
		
	public static void main(String[] args) {	
		InputStreamReader is = new InputStreamReader(System.in, Charset.forName("UTF-8"));		

		try {
			System.out.println(Integer.toHexString(is.read()));
		} catch (IOException e) {			
			e.printStackTrace();
		} finally {
			try {
				is.close();
			} catch (IOException e) {				
				e.printStackTrace();
			}
		}
		
	}
}

在cmd窗口中用chcp命令查看当前的编码是936,是GBK编码:
在命令行模式、eclipse console下执行Java程序输入中文的几种情况尝试,java,eclipse,Power Shell,windows cmd,Git Bash

执行Java程序,在窗口中输入“中”,输出结果错误:
在命令行模式、eclipse console下执行Java程序输入中文的几种情况尝试,java,eclipse,Power Shell,windows cmd,Git Bash

cmd窗口下,编码是UTF-8;程序中解码是UTF-8

代码:

package com.thb;

import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

public class Test1 {
		
	public static void main(String[] args) {	
		InputStreamReader is = new InputStreamReader(System.in, Charset.forName("UTF-8"));		

		try {
			System.out.println(Integer.toHexString(is.read()));
		} catch (IOException e) {			
			e.printStackTrace();
		} finally {
			try {
				is.close();
			} catch (IOException e) {				
				e.printStackTrace();
			}
		}
		
	}
}

在cmd窗口中用chcp 65001将当前窗口编码切换为UTF-8:
在命令行模式、eclipse console下执行Java程序输入中文的几种情况尝试,java,eclipse,Power Shell,windows cmd,Git Bash

在命令行模式、eclipse console下执行Java程序输入中文的几种情况尝试,java,eclipse,Power Shell,windows cmd,Git Bash
执行Java程序,在窗口中尝试,没有办法切换到中文输入法,也就没有办法直接输入“中”,只好从其它地方拷贝一个“中”字过来作为输入,但输出结果错误(这应该是shell处理的问题):
在命令行模式、eclipse console下执行Java程序输入中文的几种情况尝试,java,eclipse,Power Shell,windows cmd,Git Bash

在PowerShell 7.2.4尝试了cmd情况下的各种情况,结果跟cmd中得到的结果一样

在Git Bash窗口下,编码是GBK;程序中解码是GBK

代码:

package com.thb;

import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

public class Test1 {
		
	public static void main(String[] args) {	
		InputStreamReader is = new InputStreamReader(System.in, Charset.forName("GBK"));		

		try {
			System.out.println(Integer.toHexString(is.read()));
		} catch (IOException e) {			
			e.printStackTrace();
		} finally {
			try {
				is.close();
			} catch (IOException e) {				
				e.printStackTrace();
			}
		}
		
	}
}

更改Git Bash窗口的Options->Text,将字符集切换为GBK:
在命令行模式、eclipse console下执行Java程序输入中文的几种情况尝试,java,eclipse,Power Shell,windows cmd,Git Bash

在Git Bash窗口下执行java程序,可以输入“中”,输出结果正确:
在命令行模式、eclipse console下执行Java程序输入中文的几种情况尝试,java,eclipse,Power Shell,windows cmd,Git Bash

Git Bash窗口下,编码是UTF-8;程序中解码是UTF-8

代码:

package com.thb;

import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

public class Test1 {
		
	public static void main(String[] args) {	
		InputStreamReader is = new InputStreamReader(System.in, Charset.forName("UTF-8"));		

		try {
			System.out.println(Integer.toHexString(is.read()));
		} catch (IOException e) {			
			e.printStackTrace();
		} finally {
			try {
				is.close();
			} catch (IOException e) {				
				e.printStackTrace();
			}
		}
		
	}
}

更改Git Bash窗口的Options->Text,将字符集切换为UTF-8:
在命令行模式、eclipse console下执行Java程序输入中文的几种情况尝试,java,eclipse,Power Shell,windows cmd,Git Bash

在Git Bash窗口下执行java程序,可以输入“中”,输出结果正确:
在命令行模式、eclipse console下执行Java程序输入中文的几种情况尝试,java,eclipse,Power Shell,windows cmd,Git Bash

在eclipse中执行,输入窗口编码是GBK;程序中解码是GBK

代码:

package com.thb;

import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

public class Test1 {
		
	public static void main(String[] args) {	
		InputStreamReader is = new InputStreamReader(System.in, Charset.forName("GBK"));		

		try {
			System.out.println(Integer.toHexString(is.read()));
		} catch (IOException e) {			
			e.printStackTrace();
		} finally {
			try {
				is.close();
			} catch (IOException e) {				
				e.printStackTrace();
			}
		}
		
	}
}

右键单击Java工程,选择Run As->Run Configurations:
在命令行模式、eclipse console下执行Java程序输入中文的几种情况尝试,java,eclipse,Power Shell,windows cmd,Git Bash
在出现的窗口中选择Common这个tab页,编码选择GBK:
在命令行模式、eclipse console下执行Java程序输入中文的几种情况尝试,java,eclipse,Power Shell,windows cmd,Git Bash

在eclipse的Console窗口,可以输入“中”,输出结果正确:
在命令行模式、eclipse console下执行Java程序输入中文的几种情况尝试,java,eclipse,Power Shell,windows cmd,Git Bash

在eclipse中执行,输入窗口编码是UTF-8;程序中解码是UTF-8

代码:

package com.thb;

import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

public class Test1 {
		
	public static void main(String[] args) {	
		InputStreamReader is = new InputStreamReader(System.in, Charset.forName("UTF-8"));		

		try {
			System.out.println(Integer.toHexString(is.read()));
		} catch (IOException e) {			
			e.printStackTrace();
		} finally {
			try {
				is.close();
			} catch (IOException e) {				
				e.printStackTrace();
			}
		}
		
	}
}

右键单击Java工程,选择Run As->Run Configurations:
在命令行模式、eclipse console下执行Java程序输入中文的几种情况尝试,java,eclipse,Power Shell,windows cmd,Git Bash

在出现的窗口中选择Common这个tab页,编码选择UTF-8:
在命令行模式、eclipse console下执行Java程序输入中文的几种情况尝试,java,eclipse,Power Shell,windows cmd,Git Bash

在eclipse的Console窗口,可以输入“中”,输出结果正确:
在命令行模式、eclipse console下执行Java程序输入中文的几种情况尝试,java,eclipse,Power Shell,windows cmd,Git Bash文章来源地址https://www.toymoban.com/news/detail-604304.html

到了这里,关于在命令行模式、eclipse console下执行Java程序输入中文的几种情况尝试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java:Java程序通过执行系统命令调用Python脚本

    本文实现功能:Java程序调用Python脚本 直接执行 参考视频 JAVA开发必会小技巧8——用代码调用系统指令

    2024年02月14日
    浏览(49)
  • 【Java可执行程序命令】学习路线攻略,史诗级别全汇总 ~

    《【Java可执行命令】(一)编译工具javac:从源代码到字节码,深入解析Java编译工具 javac ~》 《【Java可执行命令】(二)启动应用程序java: 深入解析应用程序启动工具 java命令 ~》 《【Java可执行命令】(三)API文档生成工具javadoc: 深入解析Java API文档生成工具javadoc ~》 《

    2024年02月13日
    浏览(35)
  • Java学习之Eclipse 控制台中文输出乱码解决

    Eclipse IDE for java Developers 2023-06 版本 缺省情况下,Eclipse将输出中文或非英文字符作为问号(?)或某些奇怪的字符。,它无法显示其他非英语单词。 那么想要在控制台显示中文,我们应该怎么办呢?  先找到run ----再找到里面的 Run Configurations    在跳出的页面的右边选择c

    2024年02月08日
    浏览(44)
  • linux 下执行命令需要再次输入密码才能执行,如何在一条命令中执行

    当我在 linux 下执行如下命令时 需要再次输入cc 用户的密码才能运行, 现在我需要在一条命令中执行,不单独去输入密码执行命令 这样就可以使用一条命令执行 cc 用户下面的脚本了

    2024年02月11日
    浏览(60)
  • Java进程ProcessBuilder类的介绍及使用,ProcessBuilder调用外部程序执行shell命令Linux命令

    目录 ProcessBuilder类的介绍及使用 【前言】 【正文】 --构造方法-- --常用方法-- --使用技巧-- --调用本地Shell命令,实例-- 【总结】 【注意】         在做一个项目的时候需要用到运行时动态执行JAVA命令,一开始的思路是运行时生成bat脚本,然后通过Runtime类的exec方法之行

    2024年02月09日
    浏览(35)
  • 【Java可执行命令】(四)反编译工具javap:深入解析应用程序反编译工具javap ~

    javap 是Java开发工具包(JDK)提供的一个命令行工具,用于反编译Java字节码。它旨在帮助开发人员深入了解和分析已编译的Java类文件。 javap 可以将Java类文件解析为易于阅读的文本形式,展示其中的信息以及反编译出类的结构、方法、字段、常量池等信息 。通过阅读和分析这

    2024年02月10日
    浏览(33)
  • 【linux】ssh 远程执行命令自动输入密码方式

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅

    2024年02月02日
    浏览(42)
  • 【Java可执行命令】(八)JWS应用程序启动工具 javaws:深入解析Java Web Start应用程序的启动工具javaws ~

    Java Web Start(JWS) 是由Sun Microsystems(现为Oracle)开发的一种Java技术,旨在方便从Web浏览器启动和分发Java应用程序。 javaws 是 Java Web Start 工具的命令行版本。它使用 Java Network Launch Protocol (JNLP) 文件作为输入,并根据该文件描述的配置和资源来启动和运行相应的Java应用程序

    2024年02月16日
    浏览(31)
  • 【Java可执行命令】(五)打包部署工具 jar:深入解析应用程序打包、分发和部署工具jar ~

    Java的可执行命令程序 jar (Java Archive)最早作为一项功能在JDK 1.0中引入。它的 设计目的是为了方便在Java平台上进行打包、分发和部署应用程序 。 jar 文件可以将多个Java类、资源文件和其他依赖项打包成一个单独的归档文件,以实现更简单的应用程序管理和传输。 jar 文件是

    2024年02月11日
    浏览(49)
  • Linux Vim三种工作模式(命令模式、输入模式和编辑模式)详解

    Linux 系统中所有的内容都以文件的形式进行存储,当在命令行下更改文件内容时,常会用到文本编辑器。 我们首选的文本编辑器是 Vim。使用 Vim 编辑文件时,存在 3 种工作模式,分别是命令模式、输入模式和编辑模式,这 3 种工作模式可随意切换,如下图所示: 使用 Vim 编辑

    2024年02月10日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包