一、
IO的乱码往往出现字符流中,可在字节流向字符流转换的时候处理,如:
new InputStreamReader(new FileInputStream(file),"UTF-8")
二、
或者直接使用字节流
new String(sb.toString().getBytes("ISO-8859-1"), "UTF-8")//注:sb是字节流的简单拼装
在字节转向字符流时,如果不指定则默认取自入口函数所在的JAVA文件的编码值。分析如下:
//在创建时可以指定字符集
public InputStreamReader(InputStream in, String charsetName){
sd = StreamDecoder.forInputStreamReader(in, this, charsetName);
}
//如果没有指定则获取默认值
public static StreamDecoder forInputStreamReader(InputStream inputstream, Object obj, String s){
String s1 = s;
if(s1 == null)
s1 = Converters.getDefaultEncodingName();
if(!Converters.isCached(0, s1))
。。。
}
//默认值来自System.getProperty
public static String getDefaultEncodingName(){
GetPropertyAction getpropertyaction = new GetPropertyAction("file.encoding");//这里取自System.getProperty(变量)
return defaultEncoding;
}
System.getProperty值的来源:首先并不是操作系统os的默认编码
问题1:file.encoding的值是什么呢? 这个一开始我认为是操作系统的编码
但我错了,它的值为保存每个程序的main入口的那个java文件的保存编码(点击文件-->属性-->text file encoding(other的值),这是使用eclipse 编译器)
通过以下的代码即可证明:
/**
* Test.java源代码文件
*/
public class Test {
public static void main(String[] args) {
System.out.println(System.getProperty("file.encoding"));
//Test2.printEncoding();
}
}
1、文件保存的编码为:GB2312 时
编译执行之后,得到的结果为:
2、文件保存的编码为:GBK 时
编译执行之后,得到的结果为:
3、文件保存的编码为:UTF-8时
编译执行之后,得到的结果为:
从上面的三个结果可以看出,file.encoding的值并不是操作系统os的默认编码
而是main入口函数所在的类的保存编码.
但是这时想到了另一个问题,
问题2:是不是每个java文件都有自己的file.encoding呢?
于是我写了另一个类做试验,添加了类文件Test2.java
/**
* Test2.java源代码文件
*/
public class Test2 {
public static void printEncoding(){
System.out.println(System.getProperty("file.encoding"));
}
}
并将源文件Test.java的代码修改为:
/**
* Test.java源代码文件
*/
public class Test {
public static void main(String[] args) {
System.out.println(System.getProperty("file.encoding"));
Test2.printEncoding();//添加了这个命令
}
}
这时我将Test.java的保存编码设置为:utf-8
将Test2.java的保存编码设置为:GBK
根据问题2我最原始的假设那么
编译运行这两个文件之后得到的结果应该为:
但事实是运行后的结果为:
于是得出了结论是:
在一个运行的应用程序中
file.encoding的值只有一个,并且值为入口函数的保存编码的值
分享到:
相关推荐
Java IO(Input/Output)是Java编程语言中用于处理输入输出操作的重要部分,它提供了丰富的类库来处理各种类型的输入输出需求。在本章中,我们将深入探讨Java IO中的File类以及相关的概念和技术。 首先,File类是...
### JAVA-IO详解 #### 一、概述与基础概念 在Java编程语言中,输入输出(简称IO)处理是程序开发中的一个基本且重要的部分。Java IO系统主要由两大类构成:字节流(Byte Stream)和字符流(Character Stream)。这...
import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest...
使用`setFileSizeMax()`和`setHeaderEncoding()`方法设置大小限制,避免乱码问题。 5. **文件处理**:对于大文件,FileUpload支持写入磁盘,通过`DiskFileItemFactory`进行配置。上传的文件可以被移动、重命名或...
java IO 操作(读写、追加、删除、移动、复制、修改) java IO 操作是 Java 语言中对文件、流、输入/输出操作的统称。下面是 java IO 操作的详细知识点: 一、 java IO 操作的分类 java IO 操作可以分为两大类:...
Java IO流是Java平台中处理输入输出操作的重要组成部分,它允许程序与外部设备(如硬盘、网络、内存等)进行数据传输。Java IO流分为两大类:字节流(Byte Stream)和字符流(Character Stream)。本文将详细介绍...
public String toGBK(String str) throws java.io.UnsupportedEncodingException{ return new String(str.getBytes("ISO-8859-1"),"GBK"); } 3. 在数据库中存储和读取中文数据 对于大多数数据库的 JDBC 驱动程序...
它们是`java.io`包的一部分,提供了对带有BOM的文件进行读取的功能。`UnicodeInputStream`是一个过滤输入流,它的主要任务是检测并移除文件头中的BOM标志。`UnicodeReader`则是在`BufferedReader`基础上扩展的,用于...
### JAVA IO-NIO 详解 #### 一、IO与NIO概述 在Java开发中,输入/输出(IO)操作是程序与外部环境交互的重要环节。通过IO操作,程序可以读取外部数据或向外部环境输出数据。Java的IO体系自Java 1.0以来就一直存在...
### 乱码问题与编码方式解决方案 在计算机科学与信息技术领域中,字符编码是一个至关重要的概念,它直接关系到文本数据的正确存储、传输与显示。本文将针对标题中的几种常见编码格式(GBK、ISO 8859-1、UTF-8)以及...
- 例如,使用`java.io.File.separator`获取当前平台的路径分隔符,或者使用`java.nio.file.Paths.get(path).toString()`来获取规范化路径。 #### 9. 获取主机名和IP地址 - 获取主机名时,应使用`java.net....
如果这是一个Java项目,它可能涉及到更多的编程概念,如面向对象设计、异常处理、集合框架、IO流、多线程、网络编程等。 总之,这个压缩包提供了关于Java编程和字符编码的知识点,对于想要深入理解Java以及跨文化...
import java.io.*; import java.util.zip.*; public class CompressUtil { public static void zipFiles(String[] fileNames, String targetZipFile) { try (FileOutputStream fos = new FileOutputStream...
在Java和C#之间进行Socket通信时,遇到中文乱码问题主要是由于编码格式不一致导致的。Java默认使用UTF-8编码,而C#在处理字符串时可能使用其他编码,如GBK或ASCII。为了解决这个问题,我们需要确保两端在发送和接收...
以上代码片段展示了如何利用Apache Commons IO库来处理中文乱码问题,使得在Java中进行ZIP文件的压缩和解压更加便捷和准确。在实际开发中,根据项目需求,可以选择使用标准库或者Apache Commons IO库,确保文件名和...
3. **输入输出流编码**:Java的IO操作如读写文件,需明确指定编码。例如,使用`FileReader`和`FileWriter`时,可以传递一个`Charset`对象来指定编码。 4. **网络数据编码**:HTTP请求或响应的编码也需注意,可通过`...
import java.io.*; import java.net.*; public class JavaTelnetClient { public static void main(String[] args) throws IOException { Socket socket = new Socket("服务器IP", 23); // 连接到服务器的23端口...
java控制串口发送数据时在windows环境下正常,linux环境下报错C [librxtxSerial.so+0x75da] Java_gnu_io_RXTXPort_nativeDrain+0xea,经多方查询验证为rxtx包版本问题,用本文档中的版本可以正常运行
import java.io.*; import java.util.zip.*; public class UTF8ZipOutputStream extends ZipOutputStream { public UTF8ZipOutputStream(OutputStream out) throws IOException { super(out); } @Override ...
Java的IO流库支持对数据的读写操作,包括字节流和字符流。流可以连接到各种数据源,如文件、网络连接和内存缓冲区。管理流如BufferedReader和BufferedWriter可以提高性能,通过缓冲区一次性处理大量数据。...