`
wenson
  • 浏览: 1053705 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java字符串转换器

阅读更多

 
    无论是对程序的本地化还是国际化,都会涉及到字符编码的转换的问题。尤其在web应用中常常需要处理中文字符,这时就需要进行字符串的编码转换,将字符串编码转换为GBK或者GB2312。

一、关键技术点:
    1、当前流行的字符编码格式有:US-ASCII、ISO-8859-1、UTF-8、UTF-16BE、UTF-16LE、UTF-16、GBK、GB2312等,其中GBK、GB2312是专门处理中文编码的。
    2、String的getBytes方法用于按指定编码获取字符串的字节数组,参数指定了解码格式,如果没有指定解码格式,则按系统默认编码格式。
    3、String的“String(bytes[] bs, String charset)”构造方法用于把字节数组按指定的格式组合成一个字符串对象
   
二、实例演示: 

 

package book.String;

import java.io.UnsupportedEncodingException;

/** *//**
 * 转换字符串的编码
 * @author joe
 *
 */

public class ChangeCharset {
    /** *//** 7位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁块      */
    public static final String US_ASCII = "US-ASCII";
    /** *//** ISO拉丁字母表 No.1,也叫做ISO-LATIN-1     */
    public static final String ISO_8859_1 = "ISO-8859-1";
    /** *//** 8 位 UCS 转换格式     */
    public static final String UTF_8 = "UTF-8";
    /** *//** 16 位 UCS 转换格式,Big Endian(最低地址存放高位字节)字节顺序     */
    public static final String UTF_16BE = "UTF-16BE";
    /** *//** 16 位 UCS 转换格式,Litter Endian(最高地址存放地位字节)字节顺序     */
    public static final String UTF_16LE = "UTF-16LE";
    /** *//** 16 位 UCS 转换格式,字节顺序由可选的字节顺序标记来标识     */
    public static final String UTF_16 = "UTF-16";
    /** *//** 中文超大字符集     **/
    public static final String GBK = "GBK";
    
    public static final String GB2312 = "GB2312";
    
    /** *//** 将字符编码转换成US-ASCII码     */
    public String toASCII(String str) throws UnsupportedEncodingException {
        return this.changeCharset(str, US_ASCII);
    }
    
    /** *//** 将字符编码转换成ISO-8859-1     */
    public String toISO_8859_1(String str) throws UnsupportedEncodingException {
        return this.changeCharset(str, ISO_8859_1);
    }
    
    /** *//** 将字符编码转换成UTF-8     */
    public String toUTF_8(String str) throws UnsupportedEncodingException {
        return this.changeCharset(str, UTF_8);
    }
    
    /** *//** 将字符编码转换成UTF-16BE     */
    public String toUTF_16BE(String str) throws UnsupportedEncodingException{
        return this.changeCharset(str, UTF_16BE);
    }
    
    /** *//** 将字符编码转换成UTF-16LE     */
    public String toUTF_16LE(String str) throws UnsupportedEncodingException {
        return this.changeCharset(str, UTF_16LE);
    }
    
    /** *//** 将字符编码转换成UTF-16     */
    public String toUTF_16(String str) throws UnsupportedEncodingException {
        return this.changeCharset(str, UTF_16);
    }
    
    /** *//** 将字符编码转换成GBK     */
    public String toGBK(String str) throws UnsupportedEncodingException {
        return this.changeCharset(str, GBK);
    }
    
    /** *//** 将字符编码转换成GB2312     */
    public String toGB2312(String str) throws UnsupportedEncodingException {
        return this.changeCharset(str,GB2312);
    }
    
    /** *//**
     * 字符串编码转换的实现方法
     * @param str    待转换的字符串
     * @param newCharset    目标编码
     */
    public String changeCharset(String str, String newCharset) throws UnsupportedEncodingException ...{
        if(str != null) {
            //用默认字符编码解码字符串。与系统相关,中文windows默认为GB2312
            byte[] bs = str.getBytes();
            return new String(bs, newCharset);    //用新的字符编码生成字符串
        }
        return null;
    }
    
    /** *//**
     * 字符串编码转换的实现方法
     * @param str    待转换的字符串
     * @param oldCharset    源字符集
     * @param newCharset    目标字符集
     */
    public String changeCharset(String str, String oldCharset, String newCharset) throws UnsupportedEncodingException {
        if(str != null) {
            //用源字符编码解码字符串
            byte[] bs = str.getBytes(oldCharset);
            return new String(bs, newCharset);
        }
        return null;
    }
    
    public static void main(String[] args) throws UnsupportedEncodingException {
        ChangeCharset test = new ChangeCharset();
        String str = "This is a 中文的 String!";
        System.out.println("str:" + str);
        
        String gbk = test.toGBK(str);
        System.out.println("转换成GBK码:" + gbk);
        System.out.println();
        
        String ascii = test.toASCII(str);
        System.out.println("转换成US-ASCII:" + ascii);
        System.out.println();
        
        String iso88591 = test.toISO_8859_1(str);
        System.out.println("转换成ISO-8859-1码:" + iso88591);
        System.out.println();
        
        gbk = test.changeCharset(iso88591, ISO_8859_1, GBK);
        System.out.println("再把ISO-8859-1码的字符串转换成GBK码:" + gbk);
        System.out.println();
        
        String utf8 = test.toUTF_8(str);
        System.out.println();
        System.out.println("转换成UTF-8码:" + utf8);
        String utf16be = test.toUTF_16BE(str);
        System.out.println("转换成UTF-16BE码:" + utf16be);
        gbk = test.changeCharset(utf16be, UTF_16BE, GBK);
        System.out.println("再把UTF-16BE编码的字符转换成GBK码:" + gbk);
        System.out.println();
        
        String utf16le = test.toUTF_16LE(str);
        System.out.println("转换成UTF-16LE码:" + utf16le);
        gbk = test.changeCharset(utf16le, UTF_16LE, GBK);
        System.out.println("再把UTF-16LE编码的字符串转换成GBK码:" + gbk);
        System.out.println();
        
        String utf16 = test.toUTF_16(str);
        System.out.println("转换成UTF-16码:" + utf16);
        String gb2312 = test.changeCharset(utf16, UTF_16, GB2312);
        System.out.println("再把UTF-16编码的字符串转换成GB2312码:" + gb2312);
    }

}

 

輸出結果:

 

str:This is a 中文的 String!
转换成GBK码:This is a 中文的 String!

转换成US-ASCII:This is a ?????? String!

转换成ISO-8859-1码:This is a ?????? String!

再把ISO-8859-1码的字符串转换成GBK码:This is a 中文的 String!


转换成UTF-8码:This is a ????? String!
转换成UTF-16BE码:周楳?猠愠????瑲楮朡
再把UTF-16BE编码的字符转换成GBK码:This is a 中文的 String!

转换成UTF-16LE码:桔獩椠?????匠牴湩Ⅷ
再把UTF-16LE编码的字符串转换成GBK码:This is a 中文的 String!

转换成UTF-16码:周楳?猠愠????瑲楮朡
再把UTF-16编码的字符串转换成GB2312码:?This is a 中文的 String!

 

三、源码分析:
    更改字符串编码的步骤为:
    1、调用String的getByte方法对字符串进行解码,得到字符串的字节数组(字节数组不携带任何有关编码格式的信息,只有字符才有编码格式)
    2、根据字节数组和新的字符编码构造一个新的String对象,得到的就是按照新的字符编码生成的字符串


此文转自:http://blog.csdn.net/zhouyong80/archive/2007/11/24/1900100.aspx

2
0
分享到:
评论
1 楼 spiritfrog 2008-07-01  
有没有探测文字或文件编码的呢?

相关推荐

    JAVA 字符串 操作

    在Java编程语言中,字符串...以上只是Java字符串操作的一小部分,实际开发中还有许多其他方法和特性,如国际化(I18N)、正则表达式等,都需要程序员灵活掌握。理解并熟练运用这些操作,能有效提高代码质量和效率。

    java 字符串a-z排序

    1. **创建字符数组**:将字符串转换为字符数组,因为数组可以被排序。我们可以使用`toCharArray()`方法完成这个转换。 2. **排序字符数组**:利用Java内置的排序方法,如`Arrays.sort()`,对字符数组进行排序。默认...

    JAVA 字符串应用笔记

    - `toUpperCase()`/`toLowerCase()`: 将字符串转换为大写或小写。 - `equals(Object obj)`/`equalsIgnoreCase(String anotherString)`: 比较字符串内容是否相等,`equalsIgnoreCase`忽略大小写。 - `replace(char...

    JAVA字符串处理函数列表一览

    ### JAVA字符串处理函数列表一览 在Java编程语言中,字符串处理是极其常见且重要的操作之一。字符串类`String`提供了丰富的内置方法来帮助开发者高效地完成各种字符串操作任务。本文将详细解读`String`类中的一些...

    Java获取随机字符串

    ### Java 获取随机字符串 在Java开发中,生成随机字符串是一个非常常见的需求,尤其是在密码学、安全验证、数据加密等场景中。本文将详细介绍如何在Java中生成随机字符串,并且会结合给定的部分代码示例进行深入...

    java.util.Date与java.sql.Date互转及字符串转换为日期时间格式.docx

    ### Java.util.Date与Java.sql.Date互转及字符串转换为日期时间格式 #### 一、Java.util.Date与Java.sql.Date的基本概念 在Java编程语言中,处理日期和时间时经常使用到`java.util.Date`和`java.sql.Date`这两个类...

    Java实现计算字符串表达式

    1. **解析字符串**:将输入的字符串转换为可理解的数据结构,如抽象语法树(AST)。这可以通过递归下降解析或使用现成的解析库如JavaCC或ANTLR来完成。 2. **处理运算符优先级**:确保正确的运算顺序,比如遵循...

    Java中的字符串相关处理

    3. **字符串转换**:Java在进行连接时会自动调用`toString()`方法将非字符串数据类型转换为字符串形式。例如: ```java String s = "four: " + 2 + 2; // 结果为 "four: 22" String s = "four: " + (2 + 2); // ...

    java处理字符和字符串课件

    ### Java处理字符和字符串知识点详解 #### 一、概述 在Java编程中,字符和字符串是最常见的数据类型之一。为了方便高效地处理这些数据类型,Java提供了强大的支持,包括`Character`类和`String`类等。这些类位于`...

    java反射机制 字符串——java对象

    在提供的`xmlToObj.java`文件中,可能包含一个示例,演示如何使用反射和XML解析技术将XML字符串转换回Java对象。可能的实现是先使用XML解析库(如JAXB或DOM)将XML字符串解析成DOM树,然后通过反射找到对应的类并...

    浅谈Java字符串Java开发Java经验技巧共11页.p

    这些标签虽然没有直接关联于Java字符串,但它们代表了广泛的IT知识领域,表明这份文档可能适合各种技术水平的读者,从初学者到有一定经验的开发者,无论是对数据处理、硬件编程(如STM32,一种常见的微控制器)、...

    字符串排序

    #### 二、Java字符串排序方法 在Java中,可以通过多种方式实现字符串排序,包括但不限于使用内置的`Collections.sort()`方法(适用于可变字符序列如`ArrayList<Character>`)、自定义比较器以及编写专门的排序算法...

    java字符串的处理.pdf

    ### Java字符串处理详解 在Java编程中,字符串的处理是一项基本而重要的技能,尤其是在文本处理、数据解析和用户界面交互等场景中。本篇将基于《java字符串的处理.pdf》的内容,深入探讨Java中字符串的基本概念、...

    将字符串转换成lumbda

    4. **编译器/解释器支持**:不是所有语言都支持直接将字符串转换为 Lambda。有些语言提供了内置的机制,如 Python 的 `eval` 函数,或者 C# 的 `Expression` 类型,而其他语言可能需要使用第三方库或自定义解析器来...

    JAVA字符串中所用的方法.rar

    本资料将深入探讨Java字符串中常用的方法。 1. **创建字符串** - `new String()`: 通过构造函数创建,可以传入字符数组或另一个字符串。 - `""`: 字符串字面量,例如 `"Hello"`,Java会自动在字符串池中创建一个...

    JAVA字符串处理函数

    ### JAVA字符串处理函数详解 #### 一、substring() 在Java中,`substring()` 方法用于从字符串中截取子串。该方法有两种形式: 1. **`String substring(int startIndex)`** - **作用**:返回从指定索引 `...

    编程相关 原创字符串转换小工具

    标题中的“编程相关 原创字符串转换小工具”表明这是一个专门为编程人员设计的实用工具,专注于处理字符串的转换操作。在计算机编程中,字符串处理是至关重要的,无论是数据分析、文本解析还是用户输入验证,都会...

    java\String类型转换成整数double

    标题与描述“java String类型转换成整数double”以及标签“String类型转换成double”均指向了这一核心操作——如何将一个表示数字的字符串转换为Java中的数值类型。 ### 1. 使用`parseXxx`方法进行转换 #### `...

    Java8 将List<Integer> 转换成以逗号分割的String字符串

    在Java编程中,将一个`List<Integer>`转换成以逗号分隔的`String`字符串是一种常见的需求,尤其是在处理数据展示或格式化输出时。Java 8引入了新的特性和方法,使得这种转换变得更加简洁和高效。下面我们将深入探讨...

    java 对象与json字符串互相转换工具类

    // 将JSON字符串转换为对象 YourClass yourObject = JSON.parseObject(jsonString, YourClass.class); ``` 4. 遇到的常见问题: - **序列化/反序列化的异常**:如果对象的属性包含不可序列化的类型(如`...

Global site tag (gtag.js) - Google Analytics