java创建文件设置编码,java指定编码写文件

  java创建文件设置编码,java指定编码写文件

  00-1010一、问题分析二。字符编码III。解题前言:最近学习了Java IO流的相关知识,想通过读写文件来练习巩固知识。在使用File类创建文件时,我突然想到,如何指定文件使用的编码?那么,如何检查一个文件的代码呢?

  00-1010先去网上找答案,结果如下:

  file inputstream fis=new file inputstream(" xxxx . txt ");output streamwriter OSW=new output streamwriter(fis,“UTF-8”);上面的代码大概意思是写文件的时候,写出来的字符是用UTF-8编码的,和我预想的不一样。我想在创建文件时指定编码。像下面这样,

  File myfile=new File(test.txt "," UTF-8 ");如果(!my file . exists())my file . create new file();于是,我去查了Java API 8的官方文档。文件没有提供可以指定字符编码的构造函数。

  同时也没有提供set或get等其他访问字符编码的方法,解释了文件创建时间、文件修改时间等字符编码不是文件的固有属性.是否可读、可写、可执行,这些都是文件的固有属性,或者元信息,是文件的一部分。

  00-1010我们知道,计算机中存储的任何信息都是01串,文字也不例外。

  字符的处理包括两个过程:编码和解码编码:将字符映射到01字符串解码:将01字符串映射到字符。

  不同的字符编码,例如GBK、UTF-8,编码和解码使用的规则不同。

  对于同一个文本字符串:“中国”,用UTF-8编码保存,一般用三个字节保存一个汉字(底01字符串的十六进制形式)。

  用GBK码来保存,并用两个字节来表示一个汉字。

  当我们在文本编辑器中写入文本并保存时,编辑器会根据您设置的字符编码类型将文本“映射”成01字符串。

  你设置的字符类型,仅仅是编辑器把文字编码成成10串的转换规则而已,并不是文本的属性。

  当编辑器打开文本文件时,它显示文本而不是底部的01字符串,因为编辑器使用某种文本编码将01字符串解码为字符。如果解码中使用的字符编码与编码中使用的一致或兼容,则文本可以正确显示。如果解码时使用的字符编码与编码不一致或不兼容,就会出现乱码。

  例如,我有一个使用GBK电码的文本文件,内容是“明月几时有”。

  我用VS code(微软一款非常好用的文本编辑器)打开文件,用术语来说,就是解码文件。默认的文本编码是UTF-8,解码是相同的。但是,由于我的文本底层是GBK编码的01字符串(两个字节一个字符),使用UTF-8对01字符串进行解码,必然会因为编解码不一致而产生乱码。此时,只要手动选择相应的GBK码,解码后的文件就不会出现乱码。

  从侧面也可以看出,字符编码不是文件的固有属性.的乱码

  我讲了这么多来说明这一点:字符编码就是解码和编码时用的规则,不是文件的固有属性。.

  我不禁好奇,为什么不把字符编码设置成文件属性的一部分呢?

  假设可以设置并设置为GBK,那么操作系统需要维护和更改功能。就像一个文件不能被写入一样,如果一个程序试图写入它,操作系统也会拒绝写入。操作系统必须写入的字节必须符合GBK编码的要求。然后,每次写入一个字节,操作系统都需要检查该字节的合法性,这需要非常大的性能开销,甚至无法实现,因为有些特殊的字节可以代表GBK,也可以代表UTF-8,具有二义性。现在,做好这一切,让编辑器在打开文件时根据编码属性选择正确的编码,有什么意义呢?不需要智能编辑器,它可以根据内容的前几个字节推断出你的01字符串使用了什么编码。此外,您还可以手动设置用于解码的字符编码。

  

目录

在创建文件的时候,无法指定文件的编码.将文本写入文件时(比如文本编辑器的Ctrl S保存,本质上是一个写操作),可以选择将文本转换成01字符串的编码规则。

 

  对于Java程序,代码如下,就是文章开头提到的代码:

  file inputstream fis=new file inputstream(" xxxx . txt ");output streamwriter OSW=new output streamwriter(fis,“UTF-8”);关于Java创建文件时指定代码的实现方法这篇文章到此为止。有关Java创建文件时指定代码内容的更多信息,请搜索Popular IT以前的文章或继续浏览下面的相关文章。我希望你以后能更多地支持流行音乐!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: