导航:首页 > 编程语言 > javautf8转gb2312

javautf8转gb2312

发布时间:2023-04-07 23:28:09

Ⅰ 使用java写一个utf8 到 gb2312的编码转换函数

String newStr = new String(oldStr.getBytes("utf8"), "gb2312");
不过,你是不是要自己写一个方法实现编码转换啊?

还果真是被我猜中了?你是要自己实现吗?要是真这样的话我就去帮你看看,要是不是呢,你就以后自己琢磨琢磨,:-D

你要想实现并不难,其实就是参考Java的源码,哎,这就是开源的好处啊~~
其实我想说的是,设计Java的人固然是牛,但他又不是个神人,他能实现的我们肯定也能,只是也许我们设计出来的没有他那么全面,没他考虑的那么透彻。
也许我们现在要参考源码之类的,但是等咱们吧底层的都给抓牢了,以后什么问题解决不了!
就像以前老师让咱做文件上传下载,老师说这简单,我们全笑了,因为俺们觉得难~~你猜我们那老师怎么说,笑什么呢,是很简单啊,不就一读写文件操作嘛,你们都学到这份上了,看到问题还觉得会有很大问题吗?
唉,俺们老师不知道啊,俺们看到什么都是觉得难啊,主要是俺们没底啊~~
呵呵,远了远了,见笑啦~~

Ⅱ Java怎么将字符串转换为GB2312原编码

@Test
publicvoidtest333(){
Stringa="青白";
try{
byte[]b=a.getBytes("GB2312");
System.out.println(bytesToHexFun1(b));

}catch(UnsupportedEncodingExceptione){
e.printStackTrace();
}
}
//将byte数组转成16进制字符串
(byte[]bytes){
char[]HEX_CHAR={'0','1','2','3','4','5',
'6','7','8','9','a','b','c','d','e','f'};
//一个byte为8位,可用两个十六进制位标识
char[]buf=newchar[bytes.length*2];
inta=0;
intindex=0;
for(byteb:bytes){//使用除与取余进行转换
if(b<0){
a=256+b;
}else{
a=b;
}
buf[index++]=HEX_CHAR[a/16];
buf[index++]=HEX_CHAR[a%16];
}
returnnewString(buf);
}

中心思想就是先转成GB2312的byte数组,再转成16进制就可以了。

Ⅲ 应该如何彻底解决UTF8编码转换成GB2312编码问题

分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:

我需要将从人家网站传来的的UTF8编码携帆的字符转换成GB2312,用函数转换确实可行,但这个UTF8转GB2312编码的函数,运行起来感觉非常消耗资源,有时甚至会造成死机。

在不修改服务器设置的前提下,我应该如何解决这个问题呢?有没辩氏雹有抛核巧弃函数的转换办法,或者谁能提供一个更高效的函数?

请有过这方面的高手指点,非常感谢。

UTF8转GB2312的原函数如下(好像网上的都是这个函数):

<%

function UTF2GB(UTFStr)

for Dig=1 to len(UTFStr)

if mid(UTFStr,Dig,1)="%" then

if len(UTFStr) >= Dig+8 then

GBStr=GBStr & ConvChinese(mid(UTFStr,Dig,9))

Dig=Dig+8

else

GBStr=GBStr & mid(UTFStr,Dig,1)

end if

else

GBStr=GBStr & mid(UTFStr,Dig,1)

end if

next

UTF2GB=GBStr

end function

function ConvChinese(x)

A=split(mid(x,2),"%")

i=0

j=0

for i=0 to ubound(A)

A(i)=c16to2(A(i))

next

for i=0 to ubound(A)-1

DigS=instr(A(i),"0")

Unicode=""

for j=1 to DigS-1

if j=1 then

A(i)=right(A(i),len(A(i))-DigS)

Unicode=Unicode & A(i)

else

i=i+1

A(i)=right(A(i),len(A(i))-2)

Unicode=Unicode & A(i)

end if

next

if len(c2to16(Unicode))=4 then

ConvChinese=ConvChinese & chrw(int("&H" & c2to16(Unicode)))

else

ConvChinese=ConvChinese & chr(int("&H" & c2to16(Unicode)))

end if

next

end function

function c2to16(x)

i=1

for i=1 to len(x) step 4

c2to16=c2to16 & hex(c2to10(mid(x,i,4)))

next

end function

function c2to10(x)

c2to10=0

if x="0" then exit function

i=0

for i= 0 to len(x) -1

if mid(x,len(x)-i,1)="1" then c2to10=c2to10+2^(i)

next

end function

function c16to2(x)

i=0

for i=1 to len(trim(x))

tempstr= c10to2(cint(int("&h" & mid(x,i,1))))

do while len(tempstr)<4

tempstr="0" & tempstr

loop

c16to2=c16to2 & tempstr

next

end function

function c10to2(x)

mysign=sgn(x)

x=abs(x)

DigS=1

do

if x<2^DigS then

exit do

else

DigS=DigS+1

end if

loop

tempnum=x

i=0

for i=DigS to 1 step-1

if tempnum>=2^(i-1) then

tempnum=tempnum-2^(i-1)

c10to2=c10to2 & "1"

else

c10to2=c10to2 & "0"

end if

next

if mysign=-1 then c10to2="-" & c10to2

end function

%>

解析:

你要实现转换, 我给你写点我的经验吧. <% public String convert(String str) { String result=""; try { result=new String(str.getBytes("UTF-8"),"gb2312"); } catch (Exception ex) { System.out.println(ex.getMessage()); } return result; }%>然后在下面就可以String names=this.convert((String) ses.getAttribute("name"));进行转换了;我一般都是这样转换的.你也可以改一下.用Static方法. 搞到另一个类里面,方便调用;

Ⅳ UTF-8和GB2312互转的最简单快捷的方法

下面介绍一种UTF-8和GB2312互转的最简单快捷的方法:

一、如果你想把utf-8转为GB2312
1、用记事本打开源码,芹带把<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />换成<meta http-equiv=Content-Type content="text/html;charset=gb2312">;如闭旦果是JS不需要加这句,如果是网页最好加上这句和你页面对应的编码。

2、用记事本打开源码,另存为,编码 哪里选择 ANSI 即可。

二、如果你想把GB2312转为utf-8
1、用记事本打开源码,把<meta http-equiv=Content-Type content="text/html;charset=gb2312">换成<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />;如果是JS不需要加这句,如果是网页最好加上这句和你页面对应的编码。

2、用记事本打开源码,另存为,编码 哪里轿首扰选择 UTF-8 即可。

特别提醒:CSS的编码最好和网页的编码一致,因为有一个古老的浏览器叫IE6,他的市场占用率依然非常高,编码不一致的CSS在IE6下不起作用。

Ⅳ java中怎样将utf-8转成GB2312编码

Stringsource="测试字符串";
Stringresult=null;
try{
result=newString(source.getBytes("utf-8"),"gb2312");
}catch(){
result=source;
}
System.err.println(result);

Ⅵ 在java中,如何将utf8 十六进制编码转换成汉字

当在基于HTTP协议的JSP或Servlet的应用中获取数据或发送请求时,JVM会把输送的数据编码成UTF8格式。如果我们直接从HTTP流中提取中文数据,提取的结果为“????”(可能更多问号),为转换成我们能够理解的中文字符,我们需要把UTF8转换成GB2312,借助ISO-8859-1标准编码能够轻易的实现,下面的代码实现了这一功能:

byte [] b;
String utf8_value;
utf8_value = request.getParameter("NAME");//从HTTP流中取"NAME"的UTF8数据
b = utf8_value.getBytes("8859_1"); //中间用ISO-8859-1过渡
String name = new String(b, "GB2312"); //转换成GB2312字符

在知道流长度的情况下将输入流转换成字节数组 Java中的输入流抽象类InputStream有int read(byte[] b, int off, int len)方法,参数中byte[] b是用来存放从InputStream中读取的数据,int off指定数组b的偏移地址,也就是数组b的起始下标,int len指定需要读取的长度,方法返回实际读取的字节数。
下面的代码实现了这一功能:

ServletInputStream inStream = request.getInputStream(); //取HTTP请求流
int size = request.getContentLength(); //取HTTP请求流长度
byte[] buffer = new byte[size]; //用于缓存每次读取的数据
byte[] in_b = new byte[size]; //用于存放结果的数组
int count = 0;
int rbyte = 0;
while (count < size) {
//循环读取
rbyte = inStream.read(buffer); //每次实际读取长度存于rbyte中
for(int i=0;i<rbyte;i++) {
in_b[count + i] = buffer[i];
}
count += rbyte;
}

在不知道流长度的情况下将输入流转换成字节数组 前面介绍了已知流长度的情况下的转换方法,那么当我们不知道流有多长时,也就是说不能确定转换后的字节数组有多大时,该怎么处理呢?笔者查看了JDK文档之后发现ByteArrayOutputStream有一个byte[] toByteArray()方法,该方法会自动创建一个字节数组,然后返回。于是就巧妙的用ByteArrayOutputStream来作中间过渡实现转换,其它处理跟上面所介绍已知长度的情况差不多。假设需要被转换的流已经放在inStream里了,我们可以用如下的代码实现这一功能:

ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
byte[] buff = new byte[100]; //buff用于存放循环读取的临时数据
int rc = 0;

while ((rc = inStream.read(buff, 0, 100)) > 0) {
swapStream.write(buff, 0, rc);
}
byte[] in_b = swapStream.toByteArray(); //in_b为转换之后的结果
你试着改写成自己需要的代码

Ⅶ java utf 8转gbk

utf8和gb2312本来就是两个不同的字符集,对于中文来说,它们的编码并不会相同。如果刚开始的字符是utf8的,那么转换为gb2312后自然会是乱码;如果初始时是gb2312的中文,而后经utf8中间编码后又从utf8转为gb2312后不会是乱码的。

我想是这样的!

这有往篇文章,是关于java字符编码相关的,讲的很详细,有代码示例,你可以去看一下:http://vinter.javaeye.com/blog/670502

阅读全文

与javautf8转gb2312相关的资料

热点内容
阅读app怎么使用 浏览:317
centos防火墙命令 浏览:432
命令行变更 浏览:332
linux设备和驱动 浏览:207
加密货币骗局破案 浏览:345
cc特征码加密 浏览:775
清空dns缓存命令 浏览:295
文件夹单击右键一直转圈 浏览:820
天天玩乐园是哪个app 浏览:395
单片机数码管动态显示效果图 浏览:874
备用dns服务器地址可以调吗 浏览:267
ad剑魔和app哪个好 浏览:865
java的undefined 浏览:813
列表的合并与排序python代码 浏览:324
编译原理英文版pdf下载 浏览:951
c单片机pdf 浏览:827
adb下载命令 浏览:126
安卓怎么打开pdf 浏览:108
php笔试题选择题及答案 浏览:397
王者安卓大乔新皮肤怎么买优惠 浏览:616