Java中,Unicode的,UTF-8和Windows命令提示符(Java, Unicode, U

2019-06-26 23:55发布

我有一个应该读取jar文件中的UTF-8编码的文件,我在文本编辑器写在Windows和显示的字符在屏幕上。 在OS X和Linux这完美的作品。 我有一点无法得到它在Windows下工作,但......我已经定义了一个读写器,像这样:

FileInputStream file = new FileInputStream(args[0]);
InputStreamReader reader = new InputStreamReader(file, "UTF8");

PrintStream writer = new PrintStream(System.out, true, "UTF8");

我还改变了命令提示字体Lucida Console和所述字符编码UTF-8与chcp 65001 ,以该顺序。

现在,当我运行java -jar Read.jar file.txt ,提示挥霍了这一点。

áéí
ñóú
[]óú
[]

但是,如果我跑type file.txt ,及时正确地显示该文件的内容。

áéí
ñóú

我试着救了我有和无BOM文件,但还没有做出区别。 (UTF-8甚至不需要BOM,因为它缺乏字节顺序,正确的?)我已经试过编译javac -encoding utf8 *.java ,但同样的事情发生。

我现在的想法。 任何人都关心帮助?

Answer 1:

代码页65001坏了。 在MS C运行时stdio函数返回时65001下运行,从而导致这样一个奇怪的行为,读取和写入的字节计数错误。

这不是可以解决的 - 你不能可靠地使用Unicode的I / O Windows控制台从使用C STDLIB字节的I / O功能(包括JAVA)的应用程序。 您可以通过调用Win32 API函数WriteConsoleW获得直接的Unicode内容到控制台破解它,但你不必担心,当标准输出实际上是一个控制台(不会被重定向到文件)检测。

这是悲哀的长期源哪个MS示出了在固定不感兴趣。



Answer 2:

看起来它可能是你换行符。 当我在标准英语语言ISO-8859-1使换行字符我使用一个char []数组,因为视窗字符“\ r”和“\ n”和UNIX / Linux的是仅\ R作为换行字符。 赢得4个字节,UNIX 2个字节。 甲不,在用于字符转换器类的API文档,编码转换系统可以具有遗留扔掉依赖于编码和字符尺寸的要求杂散字节。



Answer 3:

尝试使用BufferReader阅读您的文件这样;

   BufferedReader in = new BufferedReader(
       new InputStreamReader(
                  new FileInputStream(file), "UTF8"));


文章来源: Java, Unicode, UTF-8, and Windows Command Prompt