- 浏览: 117804 次
- 性别:
- 来自: 济南
文章分类
最新评论
http://www.blogjava.net/pengpenglin/archive/2010/02/22/313647.html
getBytes()、getBytes(encoding)函数的作用是使用系统默认或者指定的字符集编码方式,将字符串编码成字节数组。
在中文平台下,默认的字符集编码是GBK,此时如果使用getBytes()或者getBytes("GBK"),则按照GBK的编码规则将每个中文字符用2个byte表示。所以我们看到"中文"最终GBK编码结果就是: -42 -48 -50 -60 。-42和-48代表了"中"字,而"-50"和"-60"则代表了"文"字。
在中文平台下,如果指定的字符集编码是UTF-8,那么按照UTF-8对中文的编码规则:每个中文用3个字节表示,那么"中文"这两个字符最终被编码成:-28 -72 -83、-26 -106 -121两组。每3个字节代表一个中文字符。
在中文平台下,如果指定的字符集编码是ISO-8859-1,由于此字符集是单字节编码,所以使用getBytes("ISO-8859-1")时,每个字符只取一个字节,每个汉字只取到了一半的字符。另外一半的字节丢失了。由于这一半的字符在字符集中找不到对应的字符,所以默认使用编码63代替,也就是?。
在英文平台下,默认的字符集编码是Cp1252(类似于ISO-8859-1),如果使用GBK、UTF-8进行编码,得到的字节数组依然是正确的(GBK4个字节,UTF-8是6个字节)。因为在JVM内部是以Unicode存储字符串的,使用getBytes(encoding)会让JVM进行一次Unicode到指定编码之间的转换。对于GBK,JVM依然会转换成4个字节,对于UTF-8,JVM依然会转换成6个字节。但是对于ISO-8859-1,则由于无法转换(2个字节--->1个字节,截取了一半的字节),所以转换后的结果是错误的。
相同的平台下,同一个中文字符,在不同的编码方式下,得到的是完全不同的字节数组。这些字节数组有可能是正确的(只要该字符集支持中文),也可能是完全错误的(该字符集不支持中文)。
记住:
不要轻易地使用或滥用String类的getBytes(encoding)方法,更要尽量避免使用getBytes()方法。因为这个方法是平台依赖的,在平台不可预知的情况下完全可能得到不同的结果。如果一定要进行字节编码,则用户要确保encoding的方法就是当初字符串输入时的encoding。
getBytes()、getBytes(encoding)函数的作用是使用系统默认或者指定的字符集编码方式,将字符串编码成字节数组。
在中文平台下,默认的字符集编码是GBK,此时如果使用getBytes()或者getBytes("GBK"),则按照GBK的编码规则将每个中文字符用2个byte表示。所以我们看到"中文"最终GBK编码结果就是: -42 -48 -50 -60 。-42和-48代表了"中"字,而"-50"和"-60"则代表了"文"字。
在中文平台下,如果指定的字符集编码是UTF-8,那么按照UTF-8对中文的编码规则:每个中文用3个字节表示,那么"中文"这两个字符最终被编码成:-28 -72 -83、-26 -106 -121两组。每3个字节代表一个中文字符。
在中文平台下,如果指定的字符集编码是ISO-8859-1,由于此字符集是单字节编码,所以使用getBytes("ISO-8859-1")时,每个字符只取一个字节,每个汉字只取到了一半的字符。另外一半的字节丢失了。由于这一半的字符在字符集中找不到对应的字符,所以默认使用编码63代替,也就是?。
在英文平台下,默认的字符集编码是Cp1252(类似于ISO-8859-1),如果使用GBK、UTF-8进行编码,得到的字节数组依然是正确的(GBK4个字节,UTF-8是6个字节)。因为在JVM内部是以Unicode存储字符串的,使用getBytes(encoding)会让JVM进行一次Unicode到指定编码之间的转换。对于GBK,JVM依然会转换成4个字节,对于UTF-8,JVM依然会转换成6个字节。但是对于ISO-8859-1,则由于无法转换(2个字节--->1个字节,截取了一半的字节),所以转换后的结果是错误的。
相同的平台下,同一个中文字符,在不同的编码方式下,得到的是完全不同的字节数组。这些字节数组有可能是正确的(只要该字符集支持中文),也可能是完全错误的(该字符集不支持中文)。
记住:
不要轻易地使用或滥用String类的getBytes(encoding)方法,更要尽量避免使用getBytes()方法。因为这个方法是平台依赖的,在平台不可预知的情况下完全可能得到不同的结果。如果一定要进行字节编码,则用户要确保encoding的方法就是当初字符串输入时的encoding。
发表评论
-
二维码
2017-07-13 16:54 402使用jquery.qrcode生成二维码 http:// ... -
servlet的url-pattern匹配规则详细描述
2017-06-20 14:06 455http://www.cnblogs.com/51kata/p ... -
Spring com.sun.proxy.$Proxy6 cannot be cast to
2017-06-16 17:08 657转载:http://blog.csdn.net/psp000 ... -
Java中getResourceAsStream的用法
2017-05-16 15:48 320转载:http://riddickbryant.iteye. ... -
log4j的使用详细解析
2017-05-15 16:50 450http://www.jb51.net/article/4 ... -
log4jdbc记录全部SQL日志
2017-05-15 15:52 417转载:http://www.cnblogs.com/xdp- ... -
BufferedInputStream如何缓冲IO以及InputStream中的read(byte[] b) 是否具有缓冲功能?
2017-04-09 17:17 315装载: http://blog.csdn.ne ... -
常见面试题
2017-03-07 11:23 343hashCode()和equals()方法的作用。 htt ... -
Java多线程之this与Thread.currentThread()的区别——java多线程编程核心技术
2017-02-08 15:12 306http://www.cnblogs.com/huangyic ... -
class getClass()
2016-12-27 16:13 393http://www.cnblogs.com/feiyun1 ... -
认真学spring官网,很容易找到spring4的jar包下载位置
2016-12-26 13:12 479http://yanln.iteye.com/blog/219 ... -
spring 下载方法
2016-10-23 15:16 0http://www.cnblogs.com/yjmyzz/ ... -
快速排序
2016-10-11 19:47 0http://www.cnblogs.com/vanezk ... -
java中为什么byte的取值范围是-128到+127
2016-09-30 16:21 604java中为什么byte的取值范围是-128到+12 ... -
java io
2016-08-31 17:48 290先看一下 InputStream 部分子类的关系。 ... -
JAVA String
2016-08-25 08:47 322转载http://blog.sina.com.cn/s/b ... -
java 异常相关文章
2016-08-23 18:26 320http://blog.csdn.net/beidou321 ... -
Spring框架下的单元测试方法
2015-10-29 14:08 425转载:http://blog.csdn.net/bruce ... -
mybatis
2015-10-23 17:31 0转载 http://my.oschina.net/u/14 ... -
Lucene源码解析--Field类
2015-07-09 15:08 528转载http://blog.itpub.net/2 ...
相关推荐
### Java中的String类getBytes()方法详解与实例 #### 简介 在Java编程语言中,`String`类是处理文本数据的核心类之一。它表示一个不可变的字符序列,这意味着一旦创建了一个`String`对象,其内容就不能被更改。在...
Encoding.UTF8.GetBytes采用的是utf-8编码。这样当然是乱码。尤其出现中文时候。 对这类数据处理当然要用统一的编码来处理。下面话不多说了,来一起看看详细的介绍吧 例子:1 string msg= Encoding.UTF8....
byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64); byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64); DESCryptoServiceProvider cryptoProvider = new ...
byte[] imageByte = new byte[dr.GetBytes(0, 0, null, 0, int.MaxValue)]; dr.GetBytes(0, 0, imageByte, 0, imageByte.Length); MemoryStream imageStream = new MemoryStream(imageByte); Image image = ...
例如,如果数据库是UTF-8,JSP是GBK,可以使用 `new String(rs.getBytes(1),"UTF-8")` 将数据库中的UTF-8字节流转换为GBK字符串。反之,如果JSP是UTF-8,数据库是GBK,需要先将GBK字符串转换为字节流,然后再次转换...
- `NSData`本质上就是Byte数组,可以使用`getBytes:length:`方法将数据复制到预先分配好的字节数组中。 - 如果需要创建`NSData`实例,可以直接从字节数组构建,如`NSData *data = [NSData dataWithBytes:bytes ...
同样,`BitConverter.GetBytes()`函数可以将浮点数转换回字节数组,便于通过串口进行通信。 在单片机(如STM32)或非.NET环境下,可能无法直接使用.NET框架提供的`BitConverter`类,因此需要编写自定义的转换函数,...
SecretKeySpec keySpec = new SecretKeySpec(KEY.getBytes(), "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); try { cipher.init(Cipher.ENCRYPT_MODE, keySpec); byte[] ...
byte[] bytes = chs.GetBytes(s); string str = ""; for (int i = 0; i ; i++) { str += string.Format("{0:X}", bytes[i]); // 转换为十六进制 if (fenge && (i != bytes.Length - 1)) { str += ","; // ...
`ToCharArray()`方法可以将字符串转换为字符数组,而`Encoding`类如`Encoding.UTF8.GetBytes()`可以将字符串转换为字节数组,`Encoding.UTF8.GetString()`则用于反向转换。 **各种数值类型和字节数组之间的转换** ...
byte[] bytes = Encoding.UTF8.GetBytes(input); // 创建MD5对象 using (MD5 md5Hash = MD5.Create()) { // 计算哈希值 byte[] hashBytes = md5Hash.ComputeHash(bytes); // 将哈希值转换为字符串 ...
byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes()); ``` 对于文件流的加密,`EncryptUtil`可能会包含一个`encryptFile`方法,它接受输入流(源文件)、输出流(加密后文件)以及密钥。这个方法会读取...
value = new String(value.getBytes("ISO-8859-1"), "UTF-8"); // 其他业务逻辑... } } ``` 通过以上步骤,大部分情况下可以解决Struts框架下的中文乱码问题。然而,具体问题可能需要具体分析,有时还需要检查...
SM4Enc_ECB(str.getBytes(), key.getBytes()); SM4Dec_ECB(bts,key.getBytes()); SM4Enc_CBC(str.getBytes(),iv.getBytes(), key.getBytes()); SM4Dec_CBC(bts,iv.getBytes(),key.getBytes()); SM4EncHex_ECB(strHex...
_clientSkt.Send(Encoding.Unicode.GetBytes(svrlog)); } Thread.CurrentThread.Abort(); break; } case "02": { byte[] onlineBuff = SerializeOnlineList(); //先发送响应信号,用于客户机的判断,"11...
而在编码函数`ToBase64String`中,同样先检查输入的字符串是否为空,然后用`Encoding.UTF8.GetBytes`将字符串转换为字节数组,再调用`Convert.ToBase64String`将其编码为Base64字符串。 接下来,为了测试这两个函数...
- 使用`System.Text.Encoding.Default.GetBytes()`方法可以将汉字转换为字节数组,以获取其在默认编码(通常是GBK或GB2312)下的区位码。例如,`"啊"`在GBK编码下转换后的字节是它的区位码。 - 对于Unicode编码,...
本文实例讲述了JS实现对中文字符串...String encodeStr = new String(Base64.encode(sql.getBytes(UTF-8))); // 编码 System.out.println(encodeStr); 得到: c2VsZWN0IOeUqOaIt+WQjSBmcm9tIOeUqOaItw== 在Java中
本篇文章将深入探讨`getBytes()`方法的用法以及在JSP中可能出现的编码错误原因。 首先,我们来了解`getBytes()`方法。这是Java String类的一个内置方法,用于将字符串转换为字节数组。默认情况下,`getBytes()`使用...
SecretKeySpec skeySpec = new SecretKeySpec(encryptKey.getBytes(), "AES"); IvParameterSpec ivParam = new IvParameterSpec(iv.getBytes()); //使用CBC模式,需要一个向量iv,可增加加密算法的强度 ...