- 浏览: 228532 次
- 性别:
- 来自: 北京
最新评论
-
凌空之鹤:
请问阁下:你代码里的response是如何获取的啊,能不能把最 ...
Android中文乱码彻底解决 -
blueflo:
mengsina 写道有个问题,就是将Parcelable做为 ...
Activitie之间传对象,通过Parcelable -
mengsina:
有个问题,就是将Parcelable做为一个数组传到里面去。A ...
Activitie之间传对象,通过Parcelable -
lauphai:
不行啊。。。。。没有那个球啊。。。
Android下修改SeekBar样式 -
dingyushuang:
这个query方法得创建,是干吗用的。而且、、怎样以列表的形式 ...
获取系统音乐
以下是我研究的成果,希望对您有帮助:
sb = new StringBuffer(); HttpEntity entity = response.getEntity(); InputStream is = entity.getContent(); BufferedReader br = new BufferedReader( new InputStreamReader(is,"GB2312")); String data = ""; while ((data = br.readLine()) != null) { sb.append(data); } String result = sb.toString();
//下面的是多余的代码,平台会按照默认编码读数据,谢谢melode11和eleda指点 result = new String(result.getBytes(),"UTF-8");
我解释一下,
BufferedReader br = new BufferedReader( new InputStreamReader(is,"GB2312"));
是读取要改编码的源,源的格式是GB2312的,安源格式读进来,然后再对源码转换成想要的编码就行
评论
14 楼
凌空之鹤
2014-12-19
请问阁下:你代码里的response是如何获取的啊,能不能把最新的解决中文乱码的代码发给我呢?QQ:1397452815
13 楼
liupeng_10408
2011-10-15
很好,解决了我的问题。
12 楼
vvvpig
2010-09-18
还是万恶的java编码问题啊
11 楼
zjjgogogo
2010-09-07
楼主,感谢啊!
10 楼
bashenmail
2009-11-23
melode11 写道
melode11 写道
bashenmail 写道
melode11 写道
result = new String(result.getBytes(),"UTF-8"); 这句莫名其妙的。
如果源真的是GB2312,那么InputStreamReader读入的已经是正确的值了。
如果想要把result按utf-8编码存到某文件, 那么 result.getBytes("utf-8")得到字节数组,再写入 outputStream才是对的。
如果源真的是GB2312,那么InputStreamReader读入的已经是正确的值了。
如果想要把result按utf-8编码存到某文件, 那么 result.getBytes("utf-8")得到字节数组,再写入 outputStream才是对的。
result = new String(result.getBytes(),"UTF-8"); 和result.getBytes("utf-8")有什么不同吗?还请您赐教
厄,如果对字符编码没概念的话,解释起来很麻烦。
result.getBytes() 是 new String(byte[]) 的逆过程。
前面那个是 String->byte[] ,后面那个是 byte[] -> String.
在java运行时的时候,String与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.
说了一大堆,不知道这表达的你能不能明白
我明白您的意思了
result = new String(result.getBytes(),"UTF-8");这段代码是确实有问题,我在调试的时候也感觉到了这个问题,就是没弄明白其中机制。非常感谢melode11详细讲解,向您致敬!高手!
这句话确实是多余的,按照您的意思client已经按照默认编码进行转换了。再次感谢melode11以后请多多关照。
9 楼
melode11
2009-11-22
melode11 写道
bashenmail 写道
melode11 写道
result = new String(result.getBytes(),"UTF-8"); 这句莫名其妙的。
如果源真的是GB2312,那么InputStreamReader读入的已经是正确的值了。
如果想要把result按utf-8编码存到某文件, 那么 result.getBytes("utf-8")得到字节数组,再写入 outputStream才是对的。
如果源真的是GB2312,那么InputStreamReader读入的已经是正确的值了。
如果想要把result按utf-8编码存到某文件, 那么 result.getBytes("utf-8")得到字节数组,再写入 outputStream才是对的。
result = new String(result.getBytes(),"UTF-8"); 和result.getBytes("utf-8")有什么不同吗?还请您赐教
厄,如果对字符编码没概念的话,解释起来很麻烦。
result.getBytes() 是 new String(byte[]) 的逆过程。
前面那个是 String->byte[] ,后面那个是 byte[] -> String.
在java运行时的时候,String与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.
说了一大堆,不知道这表达的你能不能明白
8 楼
melode11
2009-11-22
bashenmail 写道
melode11 写道
result = new String(result.getBytes(),"UTF-8"); 这句莫名其妙的。
如果源真的是GB2312,那么InputStreamReader读入的已经是正确的值了。
如果想要把result按utf-8编码存到某文件, 那么 result.getBytes("utf-8")得到字节数组,再写入 outputStream才是对的。
如果源真的是GB2312,那么InputStreamReader读入的已经是正确的值了。
如果想要把result按utf-8编码存到某文件, 那么 result.getBytes("utf-8")得到字节数组,再写入 outputStream才是对的。
result = new String(result.getBytes(),"UTF-8"); 和result.getBytes("utf-8")有什么不同吗?还请您赐教
厄,如果对字符编码没概念的话,解释起来很麻烦。
result.getBytes() 是 new String(byte[]) 的逆过程。
前面那个是 String->byte[] ,后面那个是 byte[] -> String.
在java运行时的时候,String与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的有小部分编码集合是一样的,所以英文字符,一般不管怎么转都可以歪打正着。
7 楼
bashenmail
2009-11-21
eleda 写道
melode11 写道
result = new String(result.getBytes(),"UTF-8"); 这句莫名其妙的。
如果源真的是GB2312,那么InputStreamReader读入的已经是正确的值了。
如果想要把result按utf-8编码存到某文件, 那么 result.getBytes("utf-8")得到字节数组,再写入 outputStream才是对的。
如果源真的是GB2312,那么InputStreamReader读入的已经是正确的值了。
如果想要把result按utf-8编码存到某文件, 那么 result.getBytes("utf-8")得到字节数组,再写入 outputStream才是对的。
嗯,这段的确有问题!
如果系统的默认编码是utf-8还好。
如果不是的话,result = new String(result.getBytes(),"UTF-8"); 这句就是乱码的源泉!
您说的对,我是把GB2312转换成UTF-8的,要不也不会出现乱码,可能是我表达不清
6 楼
bashenmail
2009-11-21
melode11 写道
result = new String(result.getBytes(),"UTF-8"); 这句莫名其妙的。
如果源真的是GB2312,那么InputStreamReader读入的已经是正确的值了。
如果想要把result按utf-8编码存到某文件, 那么 result.getBytes("utf-8")得到字节数组,再写入 outputStream才是对的。
如果源真的是GB2312,那么InputStreamReader读入的已经是正确的值了。
如果想要把result按utf-8编码存到某文件, 那么 result.getBytes("utf-8")得到字节数组,再写入 outputStream才是对的。
result = new String(result.getBytes(),"UTF-8"); 和result.getBytes("utf-8")有什么不同吗?还请您赐教
5 楼
eleda
2009-11-18
melode11 写道
result = new String(result.getBytes(),"UTF-8"); 这句莫名其妙的。
如果源真的是GB2312,那么InputStreamReader读入的已经是正确的值了。
如果想要把result按utf-8编码存到某文件, 那么 result.getBytes("utf-8")得到字节数组,再写入 outputStream才是对的。
如果源真的是GB2312,那么InputStreamReader读入的已经是正确的值了。
如果想要把result按utf-8编码存到某文件, 那么 result.getBytes("utf-8")得到字节数组,再写入 outputStream才是对的。
嗯,这段的确有问题!
如果系统的默认编码是utf-8还好。
如果不是的话,result = new String(result.getBytes(),"UTF-8"); 这句就是乱码的源泉!
4 楼
melode11
2009-11-17
result = new String(result.getBytes(),"UTF-8"); 这句莫名其妙的。
如果源真的是GB2312,那么InputStreamReader读入的已经是正确的值了。
如果想要把result按utf-8编码存到某文件, 那么 result.getBytes("utf-8")得到字节数组,再写入 outputStream才是对的。
如果源真的是GB2312,那么InputStreamReader读入的已经是正确的值了。
如果想要把result按utf-8编码存到某文件, 那么 result.getBytes("utf-8")得到字节数组,再写入 outputStream才是对的。
3 楼
bashenmail
2009-11-16
changsir 写道
收藏,仔细研究。谢谢楼主分享!
不敢当,也许会有更好的办法呢
2 楼
changsir
2009-11-16
收藏,仔细研究。谢谢楼主分享!
1 楼
syluke
2009-11-03
多谢分享!你的代码解决了我的问题。受教了。
发表评论
-
处理按键长按事件
2011-02-23 17:54 2280public boolean dispatchKeyEv ... -
调用系统软件详情
2011-02-23 17:45 1190Intent intent = new Intent(& ... -
PopupWindow设置AnimationStyle
2010-10-15 14:21 2638<?xml version="1.0& ... -
键盘显示与隐藏
2010-10-15 14:18 1441InputMethodManager imm = ... -
键盘挤压界面问题
2010-10-12 14:30 1510Activity中添加 android:windowSoftI ... -
PopupWindow 点击返回不消失
2010-09-23 16:45 3451注册一个PopupWindow 显示出来按返回键居然不消失,很 ... -
android 下的ftp注意问题
2010-07-28 14:44 3813以下代码在pc上测试通过,可是在android模拟器上就不工作 ... -
关闭键盘显示
2010-07-14 10:13 1640两种方法: 法一: InputMethodManag ... -
使用Git下载Google Android源代码
2010-07-14 08:53 1996文章来自:http://zzmccnu.iteye.com/b ... -
AutoCompleteTextView 实现汉字和拼音双向关联 只需改写ArrayAdapter
2010-07-08 10:49 3968具体看代码: public class CityAda ... -
定制个性化屏保(转)
2010-03-30 17:08 3193转自:http://blog.csdn.net/w ... -
自定义Dialog
2010-03-09 09:08 1990代码如下: SearchDialog.java im ... -
TextView滚动效果
2010-03-02 10:15 4008<TextView android:id ... -
Activitie之间传对象,通过Parcelable
2010-02-26 15:42 13153对象必须实现Serializable,对象代码如下: imp ... -
程序卸载应用程序
2010-02-26 15:33 1228Uri packageURI = Uri.parse(&quo ... -
本地程序打开其它程序
2010-02-26 15:31 2220Intent i = new Intent("and ... -
调用market搜索软件
2010-02-26 15:27 3839Intent installIntent = new Inte ... -
RGB转成ARGB
2010-02-26 15:19 5314colors.xml <?xml version=&q ... -
改写Preference
2010-02-26 15:15 1734代码如下: import android.content.C ... -
改写ListView样式
2010-02-26 15:08 6830<ListView android:id=&qu ...
相关推荐
解决 Android 读取中文乱码自动判断文档类型并转码 Android 读取中文 txt 文件时经常会出现乱码问题,主要是因为文档的编码格式不确定,从而导致读取时出现乱码。为了解决这个问题,我们可以通过自动判断文档类型...
本文将深入探讨如何彻底解决这一问题,包括自动判断文档编码类型以及进行转码操作。 首先,我们需要理解为什么会出现中文乱码。在计算机中,文本是以特定编码格式存储的,例如ASCII、GBK、UTF-8等。不同的编码格式...
本篇文章将深入探讨这个问题,并提供一种彻底解决中文乱码问题的方法。 首先,我们需要理解什么是乱码。乱码通常出现在字符编码不匹配的情况下,即数据存储或传输时采用的编码格式与读取或显示时使用的编码格式不...
### Android读取中文文件乱码解决方法 #### 一、问题背景 在开发Android应用时,经常需要处理中文字符或包含中文的文件。如果处理不当,可能会遇到中文乱码的问题,尤其是在读取本地文件或者从网络下载文件时更为...
本篇文章将深入探讨如何在Android平台上解决Java ZIP库在解压缩中文文件时出现的乱码问题。 首先,我们要明白乱码问题的根源。在文件的压缩和解压缩过程中,文件名通常被编码为字节序列,这个序列取决于原始文件名...
"SecureCRT中文乱码解决方法" SecureCRT 是一款功能强大且高效的 SSH 客户端,可以与多种协议进行连接,包括 SSH、Telnet 和 rlogin 协议。然而,在使用 SecureCRT 连接 Linux 服务器时,可能会出现中文乱码的情况...
Eclipse 中中文汉字乱码的解决方案 Eclipse 是一个功能强大且广泛使用的集成开发环境(IDE),但是在使用过程中,用户可能会遇到中文汉字乱码的问题。本文将为大家分享解决 Eclipse 中中文汉字乱码的方案,以便大家...
通过这个解决方案,可以彻底解决 Linux 系统中文乱码问题,使所有的中文字符都可以正常显示。同时,本文档还提供了一些其他的解决方案和建议,旨在帮助 Linux 用户更好地解决中文乱码问题。 knowledge points: * ...
android客户端上传数据中文乱码3中解决方案 一种HttpPost两种HTTPURLCONNECTION
本文将深入探讨如何在Android Things环境中解决中文乱码的问题,以及提供的Demo的具体实现。 首先,我们要理解Android Things与传统Android系统在处理字符编码上的差异。Android Things基于Android框架,但为了适应...
ZXing 2.1版GBK中文乱码解决办法: zxing中扫瞄二维码图片,如果包含Gbk中文,乱码解决办法是修改DecodedBitStreamParser.h文件,在里面加入GBK的判断。 在2.1版本中,解码的定义不在这个类中了,挪到了...
要解决"android扫描二维码中文乱码"的问题,我们需要对ZXing库进行一些定制化的修改。在描述中提到,已经有人通过修改ZXing.jar中的解码类来适配GBK编码。这个过程通常包括以下步骤: 1. **解压ZXing.jar**:首先,...
soapUI输入中文显示为乱码 响应报文中文乱码问题解决方法
Android客户端发送请求中文乱码问题完美解决 Android客户端发送请求中文乱码问题是指在Android客户端向服务器端提交请求时出现的中文乱码问题,这是由于在HTTP请求中,中文字符被编码为乱码字符所致。为了解决这个...
本项目针对ZXing进行了优化,特别是解决了中文乱码的问题,使得开发者在处理包含中文字符的二维码时能够更加顺利。以下是关于ZXing二维码开发以及解决中文乱码问题的详细知识点: 1. **ZXing框架概述**: ZXing是...
下面将详细讨论乱码产生的原因、解决方案以及如何预防。 一、乱码产生的原因 1. **编码格式不一致**:不同系统、软件或文件可能采用不同的字符编码,如ASCII、GBK、UTF-8等。当这些编码格式不兼容时,就会出现乱码...
### ADB中文乱码分析与解决方案 #### 一、问题背景及原因分析 在使用ADB (Android Debug Bridge)工具进行Android设备调试时,经常会遇到中文显示乱码的问题。这一问题主要由字符编码不一致引起。 - **ADB中的字符...
本文将深入探讨Ajax中文乱码问题的成因,并提供一系列解决方案。 **一、问题原因** 1. **编码格式不一致**:服务器与客户端(浏览器)之间使用的字符编码格式不同,例如服务器使用GBK编码,而浏览器使用UTF-8编码...
### Express 中文乱码解决方法 在Web开发中,尤其是使用Node.js的Express框架进行后端开发时,处理中文字符可能会遇到乱码问题。这通常是因为客户端与服务器之间的编码设置不一致导致的。本文将详细介绍如何在...