求jsp实现将utf-8文本格式与ANSI文本格式相互转换
时间:2008-07-18 07:12:26
来源:论坛整理 作者: 编辑:chinaitzhe
网友回复:此回复为自动发出,仅用于显示而已,并无任何其他非凡作用
楼主【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,文本格式,
下一篇:下面没有链接了











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