`

字符串转码【String.getBytes()和new String()】

    博客分类:
  • java
阅读更多
http://zhuhuide2004.iteye.com/blog/562739


在Java中,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")来得到正确的中文汉字“中”。这样就既保证了遵守协议规定、也支持中文。
分享到:
评论

相关推荐

    java字符串编码转换

    通过 `getBytes("ISO-8859-1")` 和 `new String(..., "GB2312")` 的组合,可以将该字符串转换为GB2312编码。 **3. 浏览器与服务器间的编码一致性** 在Web应用中,浏览器与服务器之间的编码一致性至关重要。通常...

    base64转码解密成明文加密成Java密文

    // 假设这是Base64编码的字符串 byte[] decodedBytes = Base64.getDecoder().decode(base64String); String plainText = new String(decodedBytes); // 将解码后的字节转换回字符串 System.out.println("明文: ...

    jvm字符转码

    6. **String的getBytes()和new String()**:`String`类的`getBytes()`方法会根据指定的字符集将字符串转换为字节数组,而`new String(byte[], charset)`则根据指定的字符集将字节数组解码为字符串。这两个方法是字符...

    关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换

    在Java中,默认的字符串类型`String`就是基于Unicode编码的。 #### 2. ISO-8859-1 ISO-8859-1是一种单字节编码方案,也被称为Latin-1,主要用于西欧语言。它只包含了256个字符,因此不能很好地支持其他非拉丁字母的...

    C#转码小工具

    这里,`Encoding.Big5.GetBytes()`用于将Big5编码的字符串转化为字节数组,然后`Encoding.UTF8.GetString()`将这些字节还原为UTF-8编码的字符串。 同样,将UTF-8编码的字符串转换为Big5,可以使用类似的方法: ```...

    jsp中页面间传汉字参数转码的方法.docx

    然后用`new String(..., "UTF-8")`创建一个新的字符串,指定以UTF-8解码这些字节。 三、注意事项 1. 在JSP页面中,确保页面的`contentType`设置正确,通常应设置为`charset=UTF-8`,以避免页面显示中文时的乱码问题...

    java的api中文转码示例

    byte[] bytes = chineseString.getBytes(StandardCharsets.UTF_8); String encodedBase64 = Base64.getEncoder().encodeToString(bytes); System.out.println("Encoded Base64: " + encodedBase64); } public ...

    8 utf8-32转码

    如果你需要处理文件中的数据,你可以读取文件内容到字符串,进行转码后再写入新的文件。例如,使用`File.ReadAllText`和`File.WriteAllText`方法。 通过学习和实践这些VB代码,你可以深入了解字符编码的原理,并...

    java转码代码

    在Java中,`Charset`类提供了各种编码的支持,`getBytes()`和`new String()`方法则是进行编码转换的核心工具。同时,理解字符流和字节流的区别,以及何时使用`Reader`和`Writer`家族的类,也是解决编码问题的关键。

    Base64 转码小工具

    解码过程则相反,`FromBase64String`方法接收Base64字符串并返回字节数组: ```csharp string base64String = "SGVsbG8sIFdvcmxkIQ=="; byte[] bytes = Convert.FromBase64String(base64String); string original...

    MD5.zip_MD5处理工具

    下面我们将详细探讨如何使用Java进行MD5处理,包括字符串转码和格式编码。 首先,我们需要导入必要的库: ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import ...

    C# 将中文乱码转换成中文

    然后,通过`GetBytes()`方法将字符串`str`转换为字节数组`btArr`,再通过`GetString()`方法将字节数组`btArr`转换为基于目标编码GB2312的字符串`dstStr`。最终,我们通过`Console.WriteLine()`输出转换后的中文字符...

    Apache common io转码工具类入门教程

    现在,我们有了GBK编码的文件内容,接下来使用`String`对象的`getBytes(Charset charset)`方法将字符串转换为指定编码的字节数组,然后再用`new String(byte[], Charset charset)`构造一个新的字符串,这次使用UTF-...

    java字符转码的三种方法总结及实例

    对于简单的字符串操作,`String`类的构造器和`getBytes`方法更简洁。在需要精细控制编码过程或处理异常字符时,`Charset`类提供更强大的功能。无论哪种方法,确保正确地解码和编码以避免乱码是至关重要的。

    java转码

    4. `String` 的编码与解码:`String`类提供了`getBytes()`和`new String(byte[], charset)`方法,用于将字符串编码为字节数组,或将字节数组解码为字符串。 5. 文件编码的处理:在处理文件时,需要知道文件的原始...

    WindowsFormsApplication1.zip

    在C#中,ASCII编码对应于`Encoding.ASCII`,可以用于将字符串转换为ASCII字节序列或从ASCII字节序列恢复字符串。 3. **C#中的编码转换**:在C#中,我们可以使用`Encoding`类的不同实例进行编码转换。例如,将GB2312...

    自己写的用于Servlet中doGet方法转码

    方法首先使用`getBytes()`方法将输入字符串按照源编码转换为字节数组,然后使用`String`构造函数将这个字节数组转换为UTF-8编码的字符串。 在Servlet的`doGet`方法中调用这个工具方法可能如下所示: ```java ...

    文件转换成字符存数据库

    1. **字符串转字节数组**:使用`System.Text.Encoding`类中的静态方法`GetBytes`将字符串转换回字节数组。 2. **写入文件**:创建一个新的文件流`FileStream`对象,并通过`BinaryWriter`将字节数组写入新文件。 ###...

    文本转码 ansi转unicode

    1. **使用`GetBytes()`和`GetString()`方法**:你可以先使用`Encoding.ANSI.GetBytes()`将ANSI编码的字符串转换为字节数组,然后再用`Encoding.UTF8.GetString()`将字节数组转换为UTF-8编码的字符串。例如: ```...

Global site tag (gtag.js) - Google Analytics