下面这段代码是通过从服务器端获取response流,然后解析的片段:
StringBuffer sb = new StringBuffer();
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent();
BufferedReader br = new BufferedReader(
new InputStreamReader(is));
String data = "";
while ((data = br.readLine()) != null) {
sb.append(data);
}
String result = sb.toString();
这样读取到的文件在Android上显示乱码,请求的网页时gb2312的,Android模拟器上的是utf-8
出现这样问题的原因如下:
在java运行时的时候,String都是没有区别的都是以2字节的unicode的形式存在内存中,所谓编码,是针对把String转换成 byte[]而言的。比如我可以把 "abc" 通过 utf-8转换成了一串数据 A ,也可以通过gb2312转换成另一串数据 B,这个过程就是 String.getBytes(),比如 "abc".getBytes("utf-8")得到A , "abc".getBytes("gb2312")得到B。如果是"abc".getBytes(),就不知道用的什么编码了,这和平台相关。
那如何从A串或者B串重新得到String呢,那就是 new String(A,"utf-8") 或者 new String(B,"gb2312")。因为A是从utf-8转换得到的,所以用utf-8转回String ,如果new String(A,"gb2312"), 那么其中的中文就是乱码。 当然gbk和utf-8的有小部分编码集合是一样的,所以英文字符,一般不管怎么转都可以歪打正着
另外,因为网络传输肯定是用byte[]的,不可能直接把String对象给传过来,所以server想把某个字符串传给client之前,需要将他转成byte[],这中间就用了server指定的一种编码,client在收到这个 byte[]之后,就必须要采用和server相同的编码,把byte[]重新转换为String。这就是InputStreamReader需要指定一个编码的原因。 InputStreamReader作用就是在通过inputStream读到byte[]的同时,将byte[]用指定的编码,转换为 char[],也就是实际上的String.
PS:上述代码段中
BufferedReader br = new BufferedReader(
new InputStreamReader(is,"UTF-8"));
就是按utf-8读取服务器端发送过来的编码格式的byte,如果服务器端发送的是GB2312的话,这样读取就会是乱码.
分享到:
相关推荐
总的来说,处理Java中CSV文件的中文乱码问题主要涉及正确设置字符编码,而给定的.NET DLL文件与此问题的解决没有直接关联。如果你在.NET环境中遇到类似问题,可以参考.NET的编码处理方式,或者寻找适合的.NET库来...
4. **输入输出流的编码设置**:Java程序在进行文件读写或网络通信时,需要显式地指定字符集编码,以避免乱码问题的发生。 5. **浏览器与服务器间的编码一致性**:对于Web应用程序而言,客户端与服务器之间必须保持...
3. **编码问题**:使用字符流时要注意指定正确的字符编码,以防止乱码问题。 4. **性能优化**:合理使用缓冲流(`BufferedReader`, `BufferedWriter`, `BufferedInputStream`, `BufferedOutputStream`)可以显著提高...
`FileReader`和`FileWriter`用于读写字符流,适用于处理文本文件,但不支持编码转换,因此在处理非ASCII字符时可能会遇到乱码问题。而`InputStream`和`OutputStream`则处理字节流,适合任何类型的数据,包括图片、...
可以通过检查文件流的状态标志(如`fail()`、`bad()`)或抛出的异常来处理这些问题。 6. **独特的读写工具** - “独特的读写工具”可能实现了特殊的文件处理逻辑,比如加密解密、压缩解压缩、分块读写、流式处理等...
需要注意的是,文本文件需要考虑编码问题,例如UTF-8编码,确保在不同系统间兼容。 3. **XML文件的读写**: XML(Extensible Markup Language)是一种结构化数据格式,常用于数据交换和配置文件。读取XML文件,...
这里使用`openFileOutput()`方法创建一个输出流,`MODE_PRIVATE`参数表示文件应为私有且如果已存在则覆盖。 2. 读数据: ```java public String readFile(String fileName) throws IOException { String res = "";...
### 关于GBK和Unicode字符集转换乱码问题 在计算机科学与互联网技术中,字符集是一种用于表示文本的标准集合,不同的字符集适用于不同的语言环境。本文将深入探讨GBK与Unicode这两种字符集之间的转换问题,特别是在...
文本流通常是指基于特定编码(如UTF-8)的字符流,它们在读写时会自动处理行结束符,使得处理文本文件更加方便。例如,java.io.BufferedReader和java.io.BufferedWriter可以看作是文本流,尽管它们实际上是字符流的...
在.NET C#编程环境中,获取字节流编码是常见的任务,尤其在处理网络通信、文件读写、数据传输等场景。字节流是计算机科学中数据传输和存储的基础,而编码则涉及到字符集的转换,如ASCII、UTF-8、UTF-16等。以下是对...
本文将对Android中文件读写的基本原理、字节流与字符流的区别以及输入流和输出流的操作进行深入探讨。 首先,理解Android中文件读写的原理至关重要。所有文件在存储时都是以字节的形式存在的,无论是文本文件还是二...
- 文件读写时需考虑字符编码问题。默认的编码可能不适用于所有系统,可以使用`Charset`类指定编码,如`new InputStreamReader(fileInputStream, StandardCharsets.UTF_8)`。 9. **流的关闭**: - 操作完成后,...
在Struts2的各个版本和不同过滤器设置下,GET方式提交的中文乱码问题仍然存在。一种可行的解决方案是在Tomcat服务器的配置文件`server.xml`中,修改`<Connector>`标签,添加`URIEncoding="UTF-8"`属性。这将强制...
9. **编码处理**:根据需要,可能需要处理文件的编码问题,如默认的ANSI编码或Unicode编码,这可以通过指定`StreamReader`和`StreamWriter`的编码参数来完成。 10. **扩展性**:为了使类更易用,可以添加更多的方法...
然而,在使用jacob进行文件转换时,可能会遇到乱码问题,这通常是由于编码不匹配或处理不当所导致的。下面我们将详细解释这个问题的可能原因,并提供相应的解决策略。 1. 编码问题:Office文档和HTML文件都支持多种...
- 文件读写时要注意编码问题,确保正确识别和处理字符集,避免乱码。 9. **并发与多线程**: - 如果在多线程环境下进行文件操作,需使用锁或其他同步机制确保线程安全,避免数据冲突。 通过以上知识点,开发者...
6. **错误处理**:在读写过程中,必须考虑可能出现的异常,如文件不存在、权限问题、数据格式错误等,通过try-catch语句进行错误捕获和处理。 7. **效率优化**:为了提高性能,可以使用缓冲技术,批量读写数据,...
4. **编码问题**:读写文件时,应明确指定字符编码,以避免乱码问题。 总之,通过合理的权限配置和有效的代码实现,可以在Android应用中轻松地完成对SD卡上TXT文件的读写操作,但同时也需要注意异常处理和性能优化...
建议在读写文件前明确指定编码格式,以避免乱码问题。 - **异常处理**:由于文件操作可能遇到各种异常情况(如文件不存在、权限不足等),因此编写代码时应加入适当的异常处理逻辑。 - **资源释放**:在完成文件读写...
在Microsoft Foundation Classes (MFC)库中,读写文本文件...在实际开发中,还需要考虑更多的细节,比如多线程环境下的同步、文件大小限制、编码格式等问题。理解并熟练掌握这些操作对于进行MFC应用程序开发至关重要。