冷僻字的问题
问?:
//gbk转unicode---------------------------------------------------------------------------
public String gbkToUnicode(byte[] Value)
{
ResultSet rs = null;
String Rtn = "";
Integer Tmp = null;
int v_UniCode=0;
int Len = Value.length;
int charH,charL;
try
{
char[] OneHZ=new char[3];
for (int i = 0;i < Len;)
{
charH=(int)Value[i];
if (charH >= 0x81)//汉字
{
charL = Value[i + 1];
if(charL >= 0x01 && charL <= 0x3F)
{
OneHZ[0] =(char)Value[i];
OneHZ[1] =(char)Value[i+1];
String v_GBK = OneHZ.toString();
String SQL = "SELECT HDDS_FUN_GBK2UNICODE('"+v_GBK+"') AS VAL FROM DUAL";
rs = this.getQueryResult(SQL);
if(rs!=null)
{
while(rs.next())
{
v_UniCode = rs.getInt("VAL");
Tmp=new Integer(v_UniCode);
}
}
Rtn=Rtn+Tmp.toString();
rs.close();
//dataSource.closeStmt();
}
else
{
OneHZ[0] = (char)Value[i];
OneHZ[1] =(char)Value[i+1];
Rtn = Rtn +OneHZ.toString();
}
i += 2;
}
else
{
Rtn = Rtn + Value[i];
i ++;
}
}
}
catch(Exception ex)
{
try
{
if (rs!=null)
{
rs.close();
//dataSource.closeStmt();
}
}
catch (SQLException ex1)
{
}
JOptionPane.showMessageDialog(null, "gbkToUnicode:" + ex.getMessage());
}
return Rtn;
}
输入的是汉字怎么还能返回汉字,数据库中存的是gbk码
"SELECT HDDS_FUN_GBK2UNICODE('"+v_GBK+"') AS VAL FROM DUAL";
这句是自定义的unicode希望高手指定
public String gbkToUnicode(byte[] Value)
{
ResultSet rs = null;
String Rtn = "";
Integer Tmp = null;
int v_UniCode=0;
int Len = Value.length;
int charH,charL;
try
{
char[] OneHZ=new char[3];
for (int i = 0;i < Len;)
{
charH=(int)Value[i];
if (charH >= 0x81)//汉字
{
charL = Value[i + 1];
if(charL >= 0x01 && charL <= 0x3F)
{
OneHZ[0] =(char)Value[i];
OneHZ[1] =(char)Value[i+1];
String v_GBK = OneHZ.toString();
String SQL = "SELECT HDDS_FUN_GBK2UNICODE('"+v_GBK+"') AS VAL FROM DUAL";
rs = this.getQueryResult(SQL);
if(rs!=null)
{
while(rs.next())
{
v_UniCode = rs.getInt("VAL");
Tmp=new Integer(v_UniCode);
}
}
Rtn=Rtn+Tmp.toString();
rs.close();
//dataSource.closeStmt();
}
else
{
OneHZ[0] = (char)Value[i];
OneHZ[1] =(char)Value[i+1];
Rtn = Rtn +OneHZ.toString();
}
i += 2;
}
else
{
Rtn = Rtn + Value[i];
i ++;
}
}
}
catch(Exception ex)
{
try
{
if (rs!=null)
{
rs.close();
//dataSource.closeStmt();
}
}
catch (SQLException ex1)
{
}
JOptionPane.showMessageDialog(null, "gbkToUnicode:" + ex.getMessage());
}
return Rtn;
}
输入的是汉字怎么还能返回汉字,数据库中存的是gbk码
"SELECT HDDS_FUN_GBK2UNICODE('"+v_GBK+"') AS VAL FROM DUAL";
这句是自定义的unicode希望高手指定
答!: 1:
怎么没人帮忙啊
答!: 2:
对返回的数据进行编码转换就可以 数据库是unicode的也没关系 取出来以后转换成gbk的就可以了
答!: 3:
保存到数据库里并不要求一定要用什么编码,但关键取数据的时候转换成GBK就可以了,
答!: 4:
取出来一定要做转换的
答!: 5:
我说的是冷僻字
答!: 6:
这段代码我看过不过是 C++版本的!java中好像不用那么费事!
我的代码是这样的!
public String Gbk2Uni(String str)
{
int len = str.length();
int low=0;
int high=0;
String str1="";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn= DriverManager.getConnection("jdbc:oracle:thin:@192.101.1.26:1521:DB3800","zacz","wo_3505");
for(int j=0;j<len;j++)
{
char a=str.charAt(j);
byte[] aGBK=(a+"").getBytes("UTF-16be");
System.out.print("UTF-16编码为");
printbyte(aGBK);
String yingHex=Integer.toHexString(a);
System.out.print("源字符\""+a+"\"");
System.out.print(" Unicode编码"+yingHex);
low = (a) & 0xff;//取c_name的低位
System.out.print(" 低位编码"+low);
high = (a >> 8) & 0xff;//取c_name的高位
System.out.print(" 高位编码"+high);
System.out.println(" 完全编码"+Integer.toHexString(high) + " " + Integer.toHexString(low));
if(high>=0x81){
if(low>=0x01&&low>=0x3f){
Statement stat=conn.createStatement();
ResultSet result= stat.executeQuery("SELECT HDDS_FUN_GBK2UNICODE('"+a+"') AS VAL FROM DUAL");
if(result.next())
{
if(result.getInt(1)!=9612)
{
int k=result.getInt(1);
a=(char)k;
System.out.print("冷僻字"+a);
System.out.print(" Unicode编码"+yingHex);
low = (a) & 0xff;//取c_name的低位
System.out.print(" 低位编码"+low);
high = (a >> 8) & 0xff;//取c_name的高位
System.out.print(" 高位编码"+high);
System.out.println(" 完全编码"+Integer.toHexString(high) + " " + Integer.toHexString(low));
}
}
result.close();
stat.close();
}
}
str1=str1+a;
}
}
catch (Exception e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
return str1;
}
public static void printbyte(byte[] bt)
{
for (int i = 0; i < bt.length; i++)
{
int hex = (int)bt[i] & 0xff;
System.out.print(Integer.toHexString(hex) + " ");
}
}
我的代码是这样的!
public String Gbk2Uni(String str)
{
int len = str.length();
int low=0;
int high=0;
String str1="";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn= DriverManager.getConnection("jdbc:oracle:thin:@192.101.1.26:1521:DB3800","zacz","wo_3505");
for(int j=0;j<len;j++)
{
char a=str.charAt(j);
byte[] aGBK=(a+"").getBytes("UTF-16be");
System.out.print("UTF-16编码为");
printbyte(aGBK);
String yingHex=Integer.toHexString(a);
System.out.print("源字符\""+a+"\"");
System.out.print(" Unicode编码"+yingHex);
low = (a) & 0xff;//取c_name的低位
System.out.print(" 低位编码"+low);
high = (a >> 8) & 0xff;//取c_name的高位
System.out.print(" 高位编码"+high);
System.out.println(" 完全编码"+Integer.toHexString(high) + " " + Integer.toHexString(low));
if(high>=0x81){
if(low>=0x01&&low>=0x3f){
Statement stat=conn.createStatement();
ResultSet result= stat.executeQuery("SELECT HDDS_FUN_GBK2UNICODE('"+a+"') AS VAL FROM DUAL");
if(result.next())
{
if(result.getInt(1)!=9612)
{
int k=result.getInt(1);
a=(char)k;
System.out.print("冷僻字"+a);
System.out.print(" Unicode编码"+yingHex);
low = (a) & 0xff;//取c_name的低位
System.out.print(" 低位编码"+low);
high = (a >> 8) & 0xff;//取c_name的高位
System.out.print(" 高位编码"+high);
System.out.println(" 完全编码"+Integer.toHexString(high) + " " + Integer.toHexString(low));
}
}
result.close();
stat.close();
}
}
str1=str1+a;
}
}
catch (Exception e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
return str1;
}
public static void printbyte(byte[] bt)
{
for (int i = 0; i < bt.length; i++)
{
int hex = (int)bt[i] & 0xff;
System.out.print(Integer.toHexString(hex) + " ");
}
}
答!: 7:
中间有一些注释不正确 是我自己随便写的 代码是正确的 能否返回汉字
主要是你的库里面定义的正不正确
主要是你的库里面定义的正不正确
相关JAVA教程:
求一正则表达式 匹配<!--123-->中文<!--123-->
急!一个困扰了很久的问题
问个jcombobox的问题
大家给推荐本学习UML的入门书
如何获得对话框的返回值?
struts:为什么出现servlet action 不是有效路径的错误
jsp如何调用JSTL中的变量?
在NetBeans 5.5 Beta 2中开发Web Services
hibernate
Web Service介绍与开发[For Jbuilder 2006] 资料来源:JBuilder文档
hibernate 的疑难:(
help~~~~~~~~!在线等~~~~~~~!