求jsp实现将utf-8文本格式与ANSI文本格式相互转换

时间:2008-07-18 07:12:26   来源:论坛整理  作者:  编辑:chinaitzhe
我要将utf-8格式的一个文本文件转换成ANSI格式,经过一定编辑后再转回utf-8格式,也就是说一个文本文件,需要两种格式相互转换的jsp程序,请问该怎么实现,或是谁做过相关的东西?
网友回复:此回复为自动发出,仅用于显示而已,并无任何其他非凡作用
楼主【luxio】截止到2008-07-17 15:18:18的历史汇总数据(不包括此帖):
发帖的总数量:4 发帖的总分数:380 每贴平均分数:95
回帖的总数量:4 得分贴总数量:1 回帖的得分率:25%
结贴的总数量:4 结贴的总分数:380
无满足结贴数:0 无满足结贴分:0
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满足结贴率:0.00 % 无满足结分率:0.00 %
敬礼!
网友回复:
Java code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/



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 转换格式,Little-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";



    /**

     * 将字符编码转换成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);

    }



    /**

     * 字符串编码转换的实现方法

     * 

     * @param str

     *            待转换编码的字符串

     * @param newCharset

     *            目标编码

     * @return

     * @throws UnsupportedEncodingException

     */

    public String changeCharset(String str, String newCharset) throws UnsupportedEncodingException {

        if (str != null) {

            // 用默认字符编码解码字符串。

            byte[] bs = str.getBytes();

            

            printByteArray(bs);            

            System.out.print("\n");

            // 用新的字符编码生成字符串

            return new String(bs, newCharset);

        }

        return null;

    }



    /**

     * 字符串编码转换的实现方法

     * 

     * @param str

     *            待转换编码的字符串

     * @param oldCharset

     *            原编码

     * @param newCharset

     *            目标编码

     * @return

     * @throws UnsupportedEncodingException

     */

    public String changeCharset(String str, String oldCharset, String newCharset) throws UnsupportedEncodingException {

        if (str != null) {

            // 用旧的字符编码解码字符串。解码可能会出现异常。

            byte[] bs = str.getBytes(oldCharset);

            

            printByteArray(bs);

            System.out.println("");

            // 用新的字符编码生成字符串

            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);

        gbk = test.changeCharset(ascii, ChangeCharset.US_ASCII, ChangeCharset.GBK);

        System.out.println("再把ASCII码的字符串转换成GBK码: "   gbk);

        System.out.println();

        String iso88591 = test.toISO_8859_1(str);

        System.out.println("转换成ISO-8859-1码: "   iso88591);

        gbk = test.changeCharset(iso88591, ChangeCharset.ISO_8859_1, ChangeCharset.GBK);

        System.out.println("再把ISO-8859-1码的字符串转换成GBK码: "   gbk);

        System.out.println();

        String utf8 = test.toUTF_8(str);

        System.out.println("转换成UTF-8码: "   utf8);

        gbk = test.changeCharset(utf8, ChangeCharset.UTF_8, ChangeCharset.GBK);

        System.out.println("再把UTF-8码的字符串转换成GBK码: "   gbk);

        System.out.println();

        String utf16be = test.toUTF_16BE(str);

        System.out.println("转换成UTF-16BE码:"   utf16be);

        gbk = test.changeCharset(utf16be, ChangeCharset.UTF_16BE, ChangeCharset.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, ChangeCharset.UTF_16LE, ChangeCharset.GBK);

        System.out.println("再把UTF-16LE码的字符串转换成GBK码: "   gbk);

        System.out.println();

        String utf16 = test.toUTF_16(str);

        System.out.println("转换成UTF-16码:"   utf16);

        gbk = test.changeCharset(utf16, ChangeCharset.UTF_16LE, ChangeCharset.GBK);

        System.out.println("再把UTF-16码的字符串转换成GBK码: "   gbk);

        String s = new String("中文".getBytes("UTF-8"), "UTF-8");

        System.out.println(s);

    }

    

    void printByteArray(byte[] bs){

        for(int i = 0,sz = bs.length;i<sz;i  )

            System.out.print(Integer.toHexString((int)bs[i]) "\t");

    }

}


别人的程序,你做个参考
网友回复:首先你要保证你的utf-8编码格式的文本文件正确的读取到java程序中:
FileInputStream fis = null;
String fileContent = null;
try{
fis = new FileInputStream("你的文本文件路径");
int fileSize = fis.available();
byte[] buffer = new byte[fileSize];
fis.read(buffer);
fileContent = new String(buffer, "utf-8");
}catch(Exception e){
e.printStackTrace();
}
这时候你可以对fileContent变量进行修改。我没明白你为什么要把它转换成ANSI格式,然后又转回utf-8格式,这时候什么意思?我只知道你可以讲filecontent从新写回文本文件中,而且可以以任何java支持的编码格式写,代码如下:
FileOutputStream fos = null;
fos = new FileOutputStream("你的文本文件路径");
fos.write(fileContent.getBytes("gb2312"));
在中文系统中ANSI代表gb2312.在日文操作系统下,ANSI 编码代表 JIS 编码。


网友回复:你这样做不会在转码的过程中使一些内容丢失产生乱码吗?
编码的互相转换并不一定是一个互相可逆的操作
你查一下两种字符集的编码方式吧
关键字:jsp,实现,utf,文本格式,ANSI,文本格式,
上一篇:hashcode 和 equals

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面