📄 繁简体(gb=big5)字符串转化的java方式实现 zeal blog - 泽欧里的网络日志.htm
字号:
pWriter.write(b_big5Table,0,b_big5Table.length);
pWriter.close();
}
/** 把gb2312编码的字符串转化成big5码的字节流 */
public byte[] gb2big5(String inStr) throws Exception{
if(null == inStr || inStr.length() <= 0){
return "".getBytes();
//return "";
}
byte[] Text =
new String(inStr.getBytes(),"GBK").getBytes("GBK");
int max = Text.length - 1;
int h = 0;
int l = 0;
int p = 0;
int b = 256;
byte[] big = new byte[2];
for(int i = 0; i < max; i++){
h = (int) (Text[i]);
if(h < 0){
h = b + h;
l = (int) (Text[i + 1]);
if(l < 0){
l = b + (int) (Text[i + 1]);
}
if(h == 161 && l == 64){
big[0] = big[1] = (byte) (161 - b);
}
else{
p = (h - 160) * 510 + (l - 1) * 2;
try{
big[0] = (byte) (b_gbTable[p] - b);
}
catch(Exception e){
big[0] = 45;
}
try{
big[1] = (byte) (b_gbTable[p + 1] - b);
}
catch(Exception e){
big[1] = 45;
}
}
Text[i] = big[0];
Text[i + 1] = big[1];
i++;
}
}
return Text;
//return new String(Text);
}
/** 把big5码的字符串转化成gb2312码的字符串 */
public String big52gb(String inStr) throws Exception{
if(null == inStr || inStr.length() <= 0){
return "";
}
byte[] Text =
new String(inStr.getBytes(),"BIG5").getBytes("BIG5");
int max = Text.length - 1;
int h = 0;
int l = 0;
int p = 0;
int b = 256;
byte[] big = new byte[2];
for(int i = 0; i < max; i++){
h = (int) (Text[i]);
if(h < 0){
h = b + h;
l = (int) (Text[i + 1]);
if(l < 0){
l = b + (int) (Text[i + 1]);
}
if(h == 161 && l == 161){
big[0] = (byte) (161 - b);
big[1] = (byte) (64 - b);
}
else{
p = (h - 160) * 510 + (l - 1) * 2;
try{
big[0] = (byte) (b_big5Table[p] - b);
}
catch(Exception e){
big[0] = 45;
}
try{
big[1] = (byte) (b_big5Table[p + 1] - b);
}
catch(Exception e){
big[1] = 45;
}
}
Text[i] = big[0];
Text[i + 1] = big[1];
i++;
}
}
return new String(Text);
}
/** 把文件读入字节数组,读取失败则返回null */
private static byte[] getBytesFromFile(String inFileName){
try{
InputStream in =
GB2Big5.class.getResourceAsStream(inFileName);
byte[] sContent = StreamConverter.toByteArray(in);
in.close();
return sContent;
/*
java.io.RandomAccessFile inStream =
new java.io.RandomAccessFile(inFileName,"r");
byte[] sContent = new byte[ (int) (inStream.length())];
inStream.read(sContent);
inStream.close();
return sContent;
*/
}
catch(Exception e){
e.printStackTrace();
return null;
}
}
public static void main(String[] args) throws Exception{
if(args.length < 2){
System.out.println(
"Usage: zeal.util.GB2Big5 [-gb | -big5] inputstring");
System.exit(1);
return;
}
boolean bIsGB = true;
String inStr = "";
for(int i = 0; i < args.length; i++){
if(args[i].equalsIgnoreCase("-gb")){
bIsGB = true;
}
else if(args[i].equalsIgnoreCase("-big5")){
bIsGB = false;
}
else{
inStr = args[i];
}
}
GB2Big5 pTmp = GB2Big5.getInstance();
String outStr = "";
if(bIsGB){
outStr = pTmp.big52gb(inStr);
}
else{
outStr = new String(pTmp.gb2big5(inStr),"BIG5");
}
System.out.println("String [" + inStr +
"] converted into:\n[" + outStr + "]");
}
}
</TEXTAREA>
<SCRIPT language=javascript
src="繁简体(GB=Big5)字符串转化的JAVA方式实现 Zeal Blog - 泽欧里的网络日志.files/shBrushJava.js"></SCRIPT>
</P>
<P>##############################<BR>直接调用GB2Big5只适用于对于少量字符的转化,当需要对整个jsp页面根据用户需要进行编码转化<BR>的时候,就需要使用到taglib的功能。<BR>具体配置使用步骤如下:</P>
<P>1.在WEB-INF/目录下增加GB2Big5Wrapper.tld文件,内容如下: <TEXTAREA class=xml name=dp_sourcecode rows=20 cols=60><?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.om/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>zealLi</short-name>
<tag>
<name>GB2Big5Wrapper</name>
<tag-class>zeal.util.GB2Big5Wrapper</tag-class>
<attribute>
<name>isbig5</name>
<rtexprvalue>true</rtexprvalue>
<type>boolean</type>
</attribute>
</tag>
</taglib>
</TEXTAREA>
<SCRIPT language=javascript
src="繁简体(GB=Big5)字符串转化的JAVA方式实现 Zeal Blog - 泽欧里的网络日志.files/shBrushXml.js"></SCRIPT>
</P>
<P>2.在需要进行转化的JSP页面里面加上:<BR><%@ taglib uri="/WEB-INF/GB2Big5Wrapper.tld"
prefix="zealLi"%><BR><zealLi:GB2Big5Wrapper
isbig5="true"><BR>任何你需要转化的东西<BR></zealLi:GB2Big5Wrapper></P>
<P>比如test.jsp源代码如下 => <TEXTAREA class=xml name=dp_sourcecode rows=20 cols=60><%@ page
contentType="text/html; charset=GBK"
import="javax.servlet.http.HttpSession"
import="java.util.*"
import="com.zealLi.*"
%><%
String encode = request.getParameter("encode");
if(null == encode || encode.length() <= 0){
encode = "BIG5";
}
boolean isBig5 = false;
String charset = "GB2312";
if(encode.equalsIgnoreCase("BIG5")){
isBig5 = true;
charset = "BIG5";
}
String sInfo = "中文字体繁简体转化的测试。";
%><%@ taglib uri="/WEB-INF/GB2Big5Wrapper.tld" prefix="zealLi"%>
<zealLi:GB2Big5Wrapper isbig5="<%= isBig5 %>">
<html>
<head>
<title>Jsp测试页面</title>
<meta http-equiv="Content-Type" content="text/html; charset=<%=charset%>">
</head>
<body>
<%
Calendar now = Calendar.getInstance();
out.println(now.get(Calendar.YEAR) + "." +
(now.get(Calendar.MONTH)+1) + "." +
now.get(Calendar.DAY_OF_MONTH) + "<p>");
%>
<p>
<%=sInfo%>
</body>
</html></zealLi:GB2Big5Wrapper></TEXTAREA> </P>
<P>附件 GB2Big5.zip(108,182 bytes): <A class=download title=发布形式的类库zip文件,可直接使用
href="http://down.zeali.net/GB2Big5.zip"><IMG class=icon
style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px"
height=16 alt=发布形式的类库zip文件,可直接使用
src="繁简体(GB=Big5)字符串转化的JAVA方式实现 Zeal Blog - 泽欧里的网络日志.files/icon_zip.gif"
width=16> 发布形式的类库zip文件,可直接使用</A></P>
<P>附件 GB2Big5_Project.zip(38,685 bytes): <A class=download
title=JBuilder工程文件,提供完整的源代码
href="http://down.zeali.net/GB2Big5_Project.zip"><IMG class=icon
style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px"
height=16 alt=JBuilder工程文件,提供完整的源代码
src="繁简体(GB=Big5)字符串转化的JAVA方式实现 Zeal Blog - 泽欧里的网络日志.files/icon_zip.gif"
width=16> JBuilder工程文件,提供完整的源代码</A>
<SCRIPT
language=javascript>dp.SyntaxHighlighter.HighlightAll("dp_sourcecode");</SCRIPT>
</P>
<P>相关日志: <A title=PHP下中文编码各种格式间的转换类 href="http://www.zeali.net/entry/55"
target=_blank alt="PHP下中文编码各种格式间的转换类">PHP下中文编码各种格式间的转换类</A> , <A
title=中文字符编码格式判断 href="http://www.zeali.net/entry/444" target=_blank
alt="中文字符编码格式判断">中文字符编码格式判断</A></P></DIV>
<DIV>
<DIV id=entryReferrerInfo>
<SCRIPT language=javascript
src="繁简体(GB=Big5)字符串转化的JAVA方式实现 Zeal Blog - 泽欧里的网络日志.files/referrer.htm"
type=text/javascript></SCRIPT>
</DIV>
<DIV id=entryLastModify>This Entry was Last Modified on 2007-05-24 16:30
</DIV></DIV>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -