`

java中文乱码问题三——java的string.getBytes

 
阅读更多

在Java中,String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组.这个表示在不通Operation System下,返回的东西不一样!

String.getBytes(String encode)方法会根据指定的encode编码返回某字符串在该编码下的byte数组表示,如:
byte[] b_gbk = "中".getBytes("GBK");
byte[] b_utf8 = "中".getBytes("UTF-8");
byte[] b_iso88591 = "中".getBytes("ISO8859-1");
将分别返回"中"这个汉字在GBK、UTF-8和ISO8859-1编码下的byte数组表示,此时b_gbk的长度为2,b_utf8的长度为3,b_iso88591的长度为1.

而与getBytes相对的,可以通过new String(byte[], decode)的方式来还原这个"中"字时,这个new String(byte[], decode)实际是使用decode指定的编码来将byte[]解析成字符串.
String s_gbk = new String(b_gbk,"GBK");
String s_utf8 = new String(b_utf8,"UTF-8");
String s_iso88591 = new String(b_iso88591,"ISO8859-1");

 

通过打印s_gbk、s_utf8和s_iso88591,会发现s_gbk和s_utf8都是"中",而只有s_iso88591是一个不认识的字符,为什么使用ISO8859-1编码再组合之后,无法还原"中"字呢,其实原因很简单,因为ISO8859-1编码的编码表中,根本就没有包含汉字字符,当然也就无法通过"中".getBytes("ISO8859-1");来得到正确的"中"字在ISO8859-1中的编码值了,所以再通过new String()来还原就无从谈起了.
因此,通过String.getBytes(String encode)方法来得到byte[]时,一定要确定encode的编码表中确实存在String表示的码值,这样得到的byte[]数组才能正确被还原.

 

 

有时候,为了让中文字符适应某些特殊要求(如http header头要求其内容必须为iso8859-1编码),可能会通过将中文字符按照字节方式来编码的情况,如:
String s_iso88591 = new String("中".getBytes("UTF-8"),"ISO8859-1") ,

这样得到的s_iso8859-1字符串实际是三个在ISO8859-1中的字符,在将这些字符传递到目的地后,

目的地程序再通过相反的方式String s_utf8 = new String(s_iso88591.getBytes("ISO8859-1"),"UTF-8") 来得到正确的中文汉字"中".这样就既保证了遵守协议规定、也支持中文.

 

 

 

 

 

分享到:
评论

相关推荐

    C#(.net)中按字节数截取字符串最后出现乱码问题的解决

    前言 最近需要用到按字节数截取字符串。在网上找了很多方法。... string msg= Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(strcode)); 例子:2 string strcode=我是小明; byte[] buffer=Encoding.UTF8.Ge

    java URL中文参数乱码处理

    js 中乱码处理法方式 encodeURIComponent(encodeURIComponent(customerAddress)) decodeURIComponent(customerName) js到java encodeURI(url) String qijuType= new String(request.getParameter( (...

    一个完整可用的证书签名(验签),加密(解密)java源码

    String sign = CertificateUtils.signToBase64(data.getBytes("utf-8"), keyStorePath, alias, password); System.out.println("私钥签名:" + sign); boolean status = CertificateUtils.verifySign(data....

    解决java中文乱码全集

    解决所有JAVA所出现的乱码问题 1.String fullname=new String(request.getParameter("fullname").getBytes("ISO8859_1"),"gb2312"); 这是对于直接用参数传到下个页面上的java接收

    StringAPI.java

    Java String 类型 API 测试代码 1.String和char[]之间的转换 toCharArray(); 2.String和byte[]之间的转换 getBytes() Arrays工具类 : Arrays.toString(names) String类 String replace(char oldChar, ...

    智能识别收货地址Java.pdf

    智能识别收货地址Java import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; ...

    C#连接Sybase数据库,并解决C#读取Sybase乱码的问题

    4,乱码问题:sybase使用latin1字符集的时候,c#中读取字符串会是乱码,进行如下转换就行: System.Text.Encoding.GetEncoding("gbk").GetString( System.Text.Encoding.GetEncoding("latin1").GetBytes( s );

    FTP上传文件,读取文件中文字符,解决乱码问题

    FTP上传文件,FTP解决乱码问题 解决乱码讲new String(s.getBytes("gbk"),"ISO8859-1");//其转换后还是乱码 改成国际中文标准码就行了

    java编程出现中文乱码解决方法一

    解决java编程中出现的中文乱码的问题 编写一个静态方法,然后在中文的输出字段转换 public static String Chinese( String value){ try { if (value==null){ return ""; }else{ value=new String(value....

    Java get 提交乱码处理方法

    解决办法  1、在后台获取时采用  String b = new String(request.getParameter("name").getBytes("iso-8859...  在前台处理汉字 java.net.URLEncoder.ecode("中文","GBK");//前面是要处理的中文字符  eg: win

    java 小程序 课程设计 java

    java坦克大战 课程设计 String str_to=request.getParameter("to"); String str_subject=new String(request.getParameter("subject").getBytes("ISO-8859-1")); String str_content=new String(request....

    Java中的String类getBytes()方法详解与实例

    在本文中,我们学习了Java String类的getBytes()方法,它允许将字符串转换为字节数组,并且可以指定字符编码方式。通过实例和代码演示了使用平台默认字符编码和指定UTF-8、ISO-8859-1字符编码的情况。getBytes()方法...

    import java.net.*;import java.io.*;

    import java.net.*; import java.io.*; public class udptest { ///创建一个数据包套接字对象ds,并且指定连接的端口号 ///创建一个数据包对象dp ///指定一个字节数组,用来存储接受的数据 public static void ...

    C#加密JAVA解密

    C# 加密 JAVA 解密源码 using System; using System.IO; using System.Security.Cryptography; namespace WindowsApplication1 { /// /// Security 的摘要说明。 /// public class Security { const string...

    java代码获取myeclipse注册码.txt

    String verTime = new StringBuilder("-").append(new java.text.SimpleDateFormat("yyMMdd").format(cal.getTime())).append("0").toString(); String type = "YE3MP-"; String need = new StringBuilder...

    struts之中文乱码问题

    struts的中文乱码问题。。我想这对大多数朋友会有用的

    sshz中文乱码解决方法

    String userTmp0 = new String(user.getUsername().getBytes("ISO-8859-1"),"GBK"); 将iso-8859-1 转成gbk编码 上面这种方式是强制转的。。 下面的方式是解决ssh乱码的 struts2中文乱码解决方案 1.在struts.xml...

    C#_string_byte数组转换解析

    C# string byte数组转换解析 C# string byte数组转换实现的过程是什么呢?C# string byte数组间的转换需要注意什么呢?C# string byte数组间转换所涉及的方法是什么呢?让我们来看看具体的内容: C# string byte数组...

    C#-DES_SAME_JAVA-DES.zip

    public static String desEncrypt(String source, String desKey) throws Exception { try { // 从原始密匙数据创建DESKeySpec对象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); ...

    微信公众平台JAVA版【绝对可用】

    微信公众平台JAVA版 【绝对可用】 部分代码: String signature=request.getParameter("signature"); String timestamp=request.getParameter("timestamp"); String nonce=request.getParameter("nonce...

Global site tag (gtag.js) - Google Analytics