`

IO流读取数据个别几个中文字符乱码问题

 
阅读更多
        response.setContentType("text/html;charset=UTF-8"); 
		request.setCharacterEncoding("UTF-8");
//		response.setCharacterEncoding("UTF-8");
		OutputStream os = null;
		InputStream is = null;
		try {
			StringBuilder sb = new StringBuilder("");
			is = request.getInputStream();
			byte[] buffer = new byte[1024];
			while (is.read(buffer) != -1) {
				sb.append(new String(buffer));
			}
			String xml = sb.toString().trim();
                } catch (Exception e) {
			e.printStackTrace();
		}

 上述代码读取的数据量大,且数据中包含中文字符,会出现个别中文字符乱码问题

 

分析原因:
  1. UTF-8是一种针对Unicode的可变长度字符编码,又称万国码。用在网页上可以统一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。
  2. 常用中文字符用utf-8编码占用3个字节(大约2万多字),但超大字符集中的更大多数汉字要占4个字节(在unicode编码体系中,U+20000开始有5万多汉字)。英文字符和数字占用1个字节。
  3. 程序中buffer为1024,在这种情况下,就会出现部分汉字只读取部分的情况,汉字的一部分进行重新编码当然会出现乱码的问题
解决方案:
                response.setContentType("text/html;charset=UTF-8"); 
                request.setCharacterEncoding("UTF-8");
//              response.setCharacterEncoding("UTF-8");
                OutputStream os = null;
                InputStream is = null;
                InputStreamReader isr = null;
                BufferedReader br = null;
                try {
                        StringBuilder sb = new StringBuilder("");
                        is = request.getInputStream();
                        isr = new InputStreamReader(is,"UTF-8");
                        br = new BufferedReader(isr);
                        String line = null;
                        while ((line = br.readLine()) != null) {
                             sb.append(line );
                        }
                        String xml = sb.toString().trim();
                } catch (Exception e) {
                    e.printStackTrace();
                }
 
分享到:
评论

相关推荐

    IO流pdf宝典

    3. **编码问题**:使用字符流时要注意指定正确的字符编码,以防止乱码问题。 4. **性能优化**:合理使用缓冲流(`BufferedReader`, `BufferedWriter`, `BufferedInputStream`, `BufferedOutputStream`)可以显著提高...

    winform的字符串转换乱码解决

    在Windows Forms(Winform)应用开发中,遇到字符串转换出现乱码的问题是非常常见的。这通常涉及到字符编码的不一致或不正确处理。本篇将详细解释这个问题的原因,并提供解决方案。 一、乱码产生的原因 1. 文件...

    java读取文件中文乱码

    在Java编程中,读取包含中文字符的文件时可能会遇到乱码问题,这通常是由于编码格式不匹配导致的。要解决这个问题,我们需要理解文件的原始编码格式,并在Java代码中正确地设置字符集。以下是一些相关的知识点: 1....

    IO流的demo

    在Java编程语言中,输入/输出(IO)流是一组用于读取和写入数据的类,它们构成了Java IO API的基础。本示例是关于如何使用Java中的IO流进行实际操作的演示,主要包括字节流和字符流的使用。字节流处理的是原始的八位...

    彻底解决JAVA读取写入 TXT中文乱码问题 源码

    在Java编程中,读取和写入TXT文件时,经常遇到中文乱码的问题。这是因为Java默认的字符编码可能与TXT文件的实际编码不一致,导致字符无法正确解析。本篇文章将深入探讨这个问题,并提供完整的源码解决方案。 首先,...

    2024IO流-字符流-HM

    字符流主要用于处理文本数据,它能够避免字节流读取中文等多字节字符时可能出现的乱码问题。字符流是按照字符为单位进行读写的,每个字符通常占用两个字节。Java提供了一系列的字符流类,如`FileReader`和`...

    IO流三种流方式的文本文件的复制

    在进行文本文件复制时,如果文件包含非ASCII编码的数据,如UTF-8编码的文件,字节流可能无法正确处理字符集,可能导致乱码问题。 接着,字符流解决了字节流处理字符编码的问题,包括Reader和Writer两个类。...

    java中文乱码解决问题

    JAVA 中文乱码问题是开发过程中常见的问题之一,解决这个问题需要了解乱码产生的原因,然后对症下药。下面我们对容易产生乱码问题的场景进行分析,并提出解决方案。 1. 以 POST 方法提交的表单数据中有中文字符 在...

    VB.NET读取文本(解决乱码)

    在VB.NET编程中,处理文本文件是常见的任务之一,但有时候由于编码问题,读取的文本可能会出现乱码。这通常发生在文件的编码格式与程序读取时所使用的编码不一致的情况下。本教程将深入探讨如何在VB.NET中正确地读取...

    c#汉字乱码处理

    在C#编程中,处理汉字乱码问题是一个常见的需求,尤其是在读取或写入文本文件时。当在C#控制台应用中遇到汉字输出乱码的情况,这通常是因为编码不匹配所导致的。编码是字符集与二进制数据之间的转换规则,不同的系统...

    python中的IO流(csdn)————程序.pdf

    在Python中,IO流(Input/Output Stream)是指进行数据输入和输出操作的过程,通常涉及内存与外部存储设备(如磁盘)之间的交互。这些操作是持久性的,意味着它们能够将数据保存在硬盘上,以便后续访问或处理。...

    java-IO流学习使用教程

    在读取文件时,使用循环读取字符,然后将这些字符写入另一个文件。这种方式简单直接,但并不高效,因为每次只读取一个字符。 4. **字符流的适用场景** - 当需要读取或写入包含文本内容的文件时,如.txt、....

    VB读取记事本无乱码txt

    记事本默认使用的是ANSI编码,但在处理多语言或者非ASCII字符时,可能会出现乱码问题。下面将详细介绍如何在VB中正确地读取记事本文件,并将其内容赋值给一个string类型的变量。 首先,我们需要了解VB中的`...

    Java字节流数据逐行读取(readLine)

    在这个例子中,我们首先创建一个`FileInputStream`对象来读取文件,然后通过`InputStreamReader`将字节流转换为字符流,并指定字符编码(这里默认为UTF-8,因为大部分现代系统都使用这个编码)。接着,我们用`...

    IO文件读取

    最基本的文件读取类是`FileReader`和`FileWriter`,它们分别用于读取和写入字符数据。然而,更常用的是`BufferedReader`和`BufferedWriter`,因为它们增加了缓冲功能,可以提高性能。 1. **使用FileReader和...

    IO流day10.docx

    字符流在处理中文或其他特定编码的文本时,能更好地避免乱码问题。 字符流与字节流的区别在于处理的数据单位不同,字符流适合处理字符编码的数据,而字节流则更适合处理二进制数据。在实际应用中,选择使用哪种流取...

    Java IO流分析、IO整理与IO优化.pdf

    数据流之所以被称为“流”,是因为在不同的时刻,它所操作的数据来自源的不同部分。 #### 二、IO流的分类 Java中的流可以根据不同的标准进行分类: 1. **按方向分类**: - **输入流**:用于从源读取数据。 - **...

    java压缩zip文件解决中文乱码问题

    这个问题主要源于字符编码的不一致,通常需要正确设置字符集来确保中文字符在压缩和解压过程中能正确保存和读取。 首先,我们要理解ZIP格式本身并不直接支持特定的字符集,而是依赖于存储的文件系统或程序的默认...

    IO流讲解-LingRan.pptx

    字符流在处理文本时需要考虑编码问题,为了避免乱码,通常建议在读写时指定UTF-8编码。 在IO流的原理中,字节流和字符流之间可以通过转换流进行相互转换。例如,`FileReader`实际上是通过`InputStreamReader`转换流...

    Java IO流.docx

    由于Java的字符编码问题,特别是在处理多语言字符时,引入了字符流,以避免因字节分割导致的乱码问题。例如,一个中文字符在UTF-8编码中可能需要3个字节,而Unicode只需要2个字节。 5. **节点流与处理流** 节点流...

Global site tag (gtag.js) - Google Analytics