`

String.getBytes();

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

String.getBytes(String decode)方法会根据指定的decode编码返回某字符串在该编码下的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 decode)方法来得到byte[]时,一定要确定decode的编码表中确实存在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

    C#加密JAVA解密

    public static string Encode(string data) { byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64); byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64); ...

    RandomAccessFile向文件中写入中文

    - 当使用`write(String.getBytes())`时,通过指定正确的编码方式(如`getBytes("GBK")`),可以确保字符正确转换为对应的字节序列。 2. **`RandomAccessFile`与文件系统的交互**: - `RandomAccessFile`类本身...

    IO流的使用,自己的心得

    byte writeStringToBytes[] = writeString.getBytes(); byte temp[] = new byte[tempLength]; //需要几次写入 if(writeStringToBytes.length%tempLength==0) each = writeStringToBytes.length/...

    MD5.zip_java security

    byte[] inputBytes = inputString.getBytes(StandardCharsets.UTF_8); md.update(inputBytes); byte[] md5Bytes = md.digest(); ``` 4. 对文件计算MD5: 计算文件的MD5值需要读取文件内容并分批更新`...

    Android手机端转换Ansi字符串,手机怎么转换为ansi编码,Delphi源码.rar

    - 使用Java的`String.getBytes()`方法,指定目标Ansi编码,将Ansi字符串转换为字节数组。 - 使用`new String(bytes, "UTF-8")`将字节数组转换回Unicode字符串。 3. Unicode字符串转换到ANSI(Android): - 使用...

    java_base64加密解密实例

    byte[] encodedBytes = Base64.encodeBase64(originalString.getBytes()); String encodedString = new String(encodedBytes); System.out.println("Original String: " + originalString); System.out.println...

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

    ### Java中的String类getBytes()方法详解与实例 #### 简介 在Java编程语言中,`String`类是处理文本数据的核心类之一。它表示一个不可变的字符序列,这意味着一旦创建了一个`String`对象,其内容就不能被更改。在...

    java自带crypto库使用示例

    byte[] keyBytes = keyString.getBytes("UTF-8"); SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_...

    C#中char[]与string之间的转换 string 转换成 Char[]

    这里,我们使用Encoding.UTF8.GetBytes方法将string转换成byte[],然后使用Encoding.UTF8.GetString方法将byte[]转换成string。 C#中char[]与string之间的转换可以通过使用ToCharArray()方法、string类的构造函数、...

    BASE64Encoder.zip

    byte[] bytes = originalString.getBytes(); // 对字节数组进行BASE64编码 String encodedString = Base64.getEncoder().encodeToString(bytes); System.out.println("Encoded: " + encodedString); } } ``` ...

    DES加密算法JAVA实现(带简单界面)

    String ciphertext = new String(outputArea.getText().getBytes()); byte[] decryptedBytes = des.decrypt(ciphertext.getBytes()); outputArea.setText(new String(decryptedBytes)); } catch (Exception ex) ...

    Java加密 消息摘要算法SHA实现详解.zip

    byte[] bytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(inputString)); // 将字节转换为十六进制字符串 StringBuilder result = new StringBuilder(); for (int i = 0; i < bytes.Length; i++) { ...

    sha256.rar sha256.java sha256.js

    byte[] hashBytes = digest.digest(inputString.getBytes()); StringBuilder hexString = new StringBuilder(); for (byte b : hashBytes) { hexString.append(String.format("%02x", b & 0xff)); } ...

    modernizer-maven-plugin:检测旧版Java API的使用

    例如,Modernizer可以检测使用Vector而不是ArrayList , String.getBytes(String)而不是String.getBytes(Charset)以及Guava Objects.equal而不是Java 7 Objects.equals 。 默认配置检测 ,包括第三方库,如 , 和 ...

    如何解决JDK1.6下的Base64

    String encodedString = BaseEncoding.base64().encode(originalString.getBytes()); System.out.println("Encoded: " + encodedString); String decodedString = new String(BaseEncoding.base64().decode...

    JAVA版MD5加密算法

    byte[] data = inputString.getBytes(); md.update(data); ``` 4. 计算哈希值: ```java byte[] digest = md.digest(); ``` 5. 将字节数组转换为16进制字符串: ```java StringBuilder hexString = new ...

    文件转换(inputString)

    byte[] byteArray = inputString.getBytes(); ByteArrayInputStream bais = new ByteArrayInputStream(byteArray); ``` - 使用`PipedInputStream`和`PipedOutputStream`:这种方法涉及创建管道来传输数据,可以...

    MD5加密工具类

    在Java中,字符串通常是UTF-8编码,因此需要使用`string.getBytes("UTF-8")`获取字节数组。 4. 计算摘要:更新完数据后,调用`digest`方法计算MD5摘要。`digest`方法会返回一个16字节的数组,表示MD5的二进制值。 ...

    Des加密解密C#源码

    Des加密解密C#源码,很实用 byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8)); byte[] rgbIV = Encoding.ASCII.GetBytes(kesVector);... return Convert.ToBase64String(mStream.ToArray());

Global site tag (gtag.js) - Google Analytics